Trong bài này mình sẽ hướng dẫn các bạn tạo nhân vật cho Shooter game với Godot nhé.
| Tham gia kênh Telegram của AnonyViet 👉 Link 👈 |
TẠO NHÂN VẬT
Trước hết các bạn tải art về nha.
Link: https://opengameart.org/content/animated-top-down-survivor-player
AnimatedSprite
Đầu tiên các bạn xoá cái Sprite đi rồi thêm cho mình lại node AnimatedSprite.![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 26 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 25](https://anonyviet.com/wp-content/uploads/2020/08/1-1.jpg)
Rồi Tạo Frame mới
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 27 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 26](https://anonyviet.com/wp-content/uploads/2020/08/2-2.jpg)
Rồi add cho mình
3 animation là : idle – move – shoot
Handgun – Rifle – Shotgun bạn có thể lấy ở trong
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 28 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 27](https://anonyviet.com/wp-content/uploads/2020/08/3-2.jpg)
Kéo hết vô 3 cái nhé
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 29 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 28](https://anonyviet.com/wp-content/uploads/2020/08/4-2.jpg)
Set CollisionShape2D lại nhé.
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 30 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 29](https://anonyviet.com/wp-content/uploads/2020/08/5-2.jpg)
Code:
Tiếp đế là code. Chúng ta sẽ kiểm tra nếu như player di chuyển thì sẽ chạy animation move và đứng im chạy animation idle, bắn thì chạy animation shoot.
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 31 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 30](https://anonyviet.com/wp-content/uploads/2020/08/6-2.jpg)
Tiếp theo vì đây là game bắn súng chúng ta phải để nhân vật nó xoay theo hướng chuột thì chúng ta có câu lệnh: look_at(get_global_mouse_position())
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 32 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 31](https://anonyviet.com/wp-content/uploads/2020/08/7-3.jpg)
Tiếp theo set camera nhé nhìn cho dễ:
Thêm node camera2D ở Zoom chỉnh lại cho nó dễ nhìn nhé mấy bạn.
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 33 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 32](https://anonyviet.com/wp-content/uploads/2020/08/8-2.jpg)
BẮN ĐẠN
Tiếp theo chúng ta sẽ tạo đạn để bắn piu piu
Link down: https://drive.google.com/file/d/1fr4xNtR-s5qS49G5N98in3oTVlVJyxAN/view?usp=sharing
Bạn tải về nhé.
Xong sau đó tạo sence mới
Nút gốc là Area 2D để kiểm tra khi bullet va chạm
CollisionShape2D
Sprite
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 34 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 33](https://anonyviet.com/wp-content/uploads/2020/08/9-1.jpg)
Các bạn kéo cái ảnh viên đạn vào Sprite
Rồi set collisionShape2D luôn
Rồi đổi tên thành Bullet
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 35 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 34](https://anonyviet.com/wp-content/uploads/2020/08/10-3.jpg)
Tạo Script mới
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 36 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 35](https://anonyviet.com/wp-content/uploads/2020/08/11-2.jpg)
Ở đây mình sẽ thêm 1 hàm để viên đạn có thể spawn ở vị trí nào đó mà bạn muốn và Sát thương (damage)
func start_at(pos, dir): position = pos rotation = dir velocity = Vector2(speed, 0).rotated(dir)
position =pos : nghĩa là vị trí của cái viên đạn sẽ bác cái pos
rotation = độ xoay của viên đạn
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 37 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 36](https://anonyviet.com/wp-content/uploads/2020/08/12-2.jpg)
Tiếp theo thì sẽ tạo 1 hàm để gán tốc độ cho viên đạn để nó có thể fly
func _physics_process(delta): position += velocity * delta
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 38 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 37](https://anonyviet.com/wp-content/uploads/2020/08/13-1.jpg)
À các bạn nhớ quay 2 nút Sprite và Collishape sang ngang nhé nếu không muốn nó bắn dọc
Rồi tiếp theo chúng ta phải check xem nếu như viên đạn ra khỏi màn hình thì nó tự huỷ để không thể tích lại gây lag.
Rồi các bạn thêm nút VisibilityNotifier2D sau đó chỉnh sao chó ổn là được. Rồi sau đó connect tín hiệu screen_exit (thoát khỏi màn hình)
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 39 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 38](https://anonyviet.com/wp-content/uploads/2020/08/15-5.jpg)
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 40 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 39](https://anonyviet.com/wp-content/uploads/2020/08/16-3.jpg)
Rồi ở câu đó chúng ta thêm câu lệnh : queue_free()
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 41 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 40](https://anonyviet.com/wp-content/uploads/2020/08/17-1.jpg)
Rồi tiếp theo chúng ta sẽ bắn nó.
Trước đó bạn cần phải có sence của bullet để có thể add nó vào và dùng onready là khi chạy thì nó sẽ được load luôn
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 42 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 41](https://anonyviet.com/wp-content/uploads/2020/08/18.jpg)
Rồi sau đó check nếu nhấn phím F nó sẽ bắn
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 43 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 42](https://anonyviet.com/wp-content/uploads/2020/08/19-1.jpg)
get_parent().add_child(b): nghĩa là nó sẽ lấy bố mẹ rồi add_child tức là thêm cái nút đạn vào nếu có video thì mình sẽ minh hoạ dễ hơn.
b.start_at(global_position,rotation) : global_position = vị trí của nhân vật, rotation là cái góc xoay.
Khi bắn bạn sẽ thấy nó xuất hiện ở giữa player, chúng ta cần phải chỉnh cho nó ra ngoài cây súng.Vậy thì làm như sau.
Bạn thêm nút Position2D rồi kéo nó vô chỗ mà bạn muốn viên đạn xuất hiện
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 44 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 43](https://anonyviet.com/wp-content/uploads/2020/08/20-1.jpg)
Tiếp theo thì đơn giản thôi bạn chỉ cần thêm $Position2D vào trước cái global_position để spawn ở cái chỗ trên
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 45 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 44](https://anonyviet.com/wp-content/uploads/2020/08/21-1.jpg)
Và nếu chạy thì bạn sẽ gặp trường hợp như ảnh
![[Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 46 [Godot Shooter] #2: Tạo Nhân Vật & Bắn Đạn 45](https://anonyviet.com/wp-content/uploads/2020/08/22.jpg)
Và bài sau sẽ có cách fix
Code Player:
extends KinematicBody2D
export var speed = 200
onready var bullet = preload("res://Canh/Bulet.tscn")
func _physics_process(delta):
look_at(get_global_mouse_position())
laydau_nhapvao(delta)
func laydau_nhapvao(delta):
var vector_dauvao = Vector2.ZERO
vector_dauvao.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
vector_dauvao.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
vector_dauvao = vector_dauvao.normalized()
if vector_dauvao != Vector2.ZERO:
$AnimatedSprite.play("move")
else:
$AnimatedSprite.play("idle")
var dichuyen = vector_dauvao * speed * delta
if Input.is_key_pressed(KEY_F):
shoot()
dichuyen = move_and_collide(dichuyen)
func shoot():
var b = bullet.instance()
get_parent().add_child(b)
b.start_at($Position2D.global_position,rotation)
Câu hỏi thường gặp
Tôi cần chuẩn bị những gì trước khi bắt đầu làm theo hướng dẫn?
Bạn cần tải về bộ ảnh nhân vật và viên đạn từ các liên kết được cung cấp trong bài viết. Đảm bảo bạn đã cài đặt Godot Engine.
Làm thế nào để nhân vật xoay theo hướng chuột?
Sử dụng hàm look_at(get_global_mouse_position()) trong script của nhân vật.
Nếu viên đạn không xuất hiện đúng vị trí mong muốn thì sao?
Thêm một node Position2D vào scene của nhân vật và sử dụng $Position2D.global_position thay cho global_position khi tạo viên đạn để xác định vị trí xuất phát chính xác hơn.

![[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 48 [Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 46](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-04-43-13-120x86.png)
![[Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 49 [Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 47](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-01-02-39-120x86.png)
![[Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 50 [Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 48](https://anonyviet.com/wp-content/uploads/2021/11/24-11-2021-12-17-23-120x86.png)

![[Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 52 [Tạo 2D Platformer Game với Godot] Phần 29: Lưu và load dữ liệu game 49](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-04-43-13.png)
![[Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 53 [Tạo 2D Platformer Game với Godot] Phần 28: Thêm âm thanh giao diện 50](https://anonyviet.com/wp-content/uploads/2021/11/25-11-2021-01-02-39-350x245.png)
![[Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 54 [Tạo 2D Platformer Game với Godot] Phần 27: Mở khoá level 51](https://anonyviet.com/wp-content/uploads/2021/11/24-11-2021-12-17-23.png)
![[Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 56 [Tạo 2D Platformer Game với Godot] Phần 25: Tạo Menu khi hết Level 53](https://anonyviet.com/wp-content/uploads/2021/11/23-11-2021-11-13-02.png)




