-
Chào mừng trở lại với loạt
video game scavengers.
-
Trong video trước, chúng
ta đã xem xét thiết lập
-
dự án và trình diễn sản phẩm hoàn chỉnh.
-
Trong video này, chúng ta sẽ tạo animation
-
cho người chơi (player) và kẻ địch (enemy)
-
từ sprite sheet
-
và thiết lập player và enemy prefabs
-
Hãy tạo một new scene
-
và chúng ta sẽ bắt đầu tạo player prefab
-
cùng với animations của player
-
Chúng ta chọn Game Object - Create Empty
-
và chúng ta sẽ có bảng Player hiện ra
-
Trong folder Sprite
chúng ta có một sprite sheet
-
bây giờ chúng ta cắt nó
-
thành nhiều sprites nhỏ
-
Để biết thông tin thêm
về sprite sheets và sprites
-
bạn có thể xem ở link bên dưới
-
Trong trường hợp này chúng ta sẽ lấy
-
frames đầu tiên
-
nó là player idle animation,
-
và tôi đã làm điều đó bằng việc
click vào frame đầu tiên
-
và sau đó shift-clicking
đến farme cuối cùng mà tôi muốn
-
Tôi sẽ lấy những thứ này rồi bỏ chúng vào đây
-
tới player prefab
-
và sau đó ta đặt cho nó một cái tên
-
chúng ta sẽ gọi nó là PlayerIdle
-
Đây sẽ là animation sẽ chạy khi
-
player không làm bất cứ thứ gì
-
Chúng ta sẽ đặt cái này vào folder Animations
-
Bạn sẽ nhận thấy khi chúng ta làm điều này sẽ có hai thành phần (components)
-
được thêm vào game object, một là sprite renderer (kết xuất đồ họa),
-
nó sẽ hiển thị các frame hiện tại
-
Và một animator, nó sẽ cho phép chúng ta chạy animation.
-
Khi chúng ta frames vào
-
hai components này, nó sẽ yêu cầu chúng ta
-
lưu animation (cái mà chúng ta đã lưu)
vào folder Animations con
-
Nó cũng tạo ra animator controller,
-
cho phép chúng ta quản lí
-
animation đang chạy hiện tại.
-
Chúng ta sẽ di chuyển nó đến folder Animator Controllers
-
Và chúng ta sẽ thêm một số animations nữa cho player.
-
Hãy trở lại sprites.
-
Và trong trường hợp này tôi sẽ chọn
-
hai PlayerChop animation frames,
-
thả chúng vào player,
-
và chúng ta sẽ đặt tên là PlayerChop.
-
Chúng ta sẽ đặt nó vào folder Animations.
-
Bây giờ để ý sẽ thấy khi chúng ta làm như vậy sẽ không thêm
-
một animator controller khác nữa, thay vào đó
-
sẽ thêm một animation
-
vào animator controller đã tồn tại trên player.
-
Chúng ta sẽ làm lại với PlayerHit animation.
-
Tiếp theo chúng ta có thể kiểm tra để chắc chắn là chúng hoạt động.
-
Và chúng ta có thể thấy PlayerIdle đang chạy.
-
Bây giờ animation của chúng ta hơi nhanh
-
nên chúng ta sẽ mở nó
-
bằng việc click đúp vào animaor controller,
-
làm rõ trạng thái PlayerIdle
-
chúng ta chỉ cần cài đặt speed thành 0.5,
-
nó sẽ chạy với một nửa tốc độ bình thường.
-
Lưu ý rằng hai animations khác của chúng ta
-
cũng vừa mới được thêm vào states,
-
và trong loạt series sau này chúng ta sẽ
-
học cách để thay đổi
-
giữa các states bằng script.
-
Bây giờ hãy kiểm tra nó.
-
Đây.
-
Với những animations chudng ta đã tạo cho Player
-
chúng ta sẽ tiếp tục và áp dụng một tag
-
cho player tên là Player.
-
Bây giờ tag Player đã được xác định trước
-
trong tất cả projects Unity, chúng ta cũng sẽ thêm
-
vài tag nữa như là food, exit,
-
enemy và soda.
-
Vậy là đã xong thêm tag
-
và gõ vào những trường này.
-
Chúng ta sẽ cài đặt tag Player
-
và chúng ta cũng thiết lập layer (lớp).
-
Đây là layer mặc định của chúng ta,
-
và chúng ta thêm một layer gọi là Blocking Layer (layer chặn).
-
Đây là layer mà trên nó
-
tất cả các collisions (va chạm) được kiểm tra
-
và chúng ta sẽ chọn nó
-
cho player, và chúng ta thêm nó theo cách tương tự,
-
bằng việc chọn Add Layer và gõ vào đó.
-
Chúng ta sẽ tiếp tục chọn blocking layer.
-
Chúng ta sẽ thêm một layer nữa
-
liên quan đến player,
-
chúng ta sẽ thiết lập sorting layer cho sprite renderer.
-
Bây giờ chúng ta đã có một số layer xác định trước ở đây,
-
chúng ta có Floor layer, nó sẽ là background.
-
và Item layer, nó sẽ được hiển thị phía trước floor,
-
nó chính là food và soda.
-
Và sau đó là Units layer cho player và enemy.
-
Chúng ta sẽ chỉ định player cho Units layer.
-
Tiếp theo chúng ta thêm hai component
-
tới player, chúng ta sẽ thêm box collider 2D
-
và rigidbody 2D.
-
Box collider 2D sẽ cho phép chúng ta
-
kiểm tra collision (va chạm) với người chơi
-
Và rigidbody 2D sẽ cho phép chúng ta
-
di chuyển player bằng cách sử dụng phương pháp vật lý.
-
Chúng ta sẽ cài đặt rigidbody 2D là Is Kinematic
-
để cho player không bay lên
-
và nhảy lung tung, chúng ta sẽ chỉ cho anh ta di chuyển
-
trong không gian cho phép.
-
Chúng ta sẽ điều khiển nó bằng script
-
và cài đặt nó là Is Kinematic.
-
Chúng ta cũng sẽ điều chỉnh kích thước
-
của box collider 2D
-
làm nó nhỏ hơn chút để player
-
sẽ không vô tình va chạm với
-
những thứ trong không gian lân cận,
-
chỉ khi chúng đang cố gắng để di chuyển vào một không gian
-
bị chiếm bởi một collider khác.
-
Chúng ta sẽ còn thêm một vài component khác cho player nữa
-
nhưng hiện tại bây giờ như thế này là ok.
-
Chúng ta sẽ lấy nó
-
và kéo vào folder Prefabs để lưu nó lại.
-
Bây giờ chúng ta sẽ tạo prefab
-
chúng ta tạm thời có thể xóa player từ hierarchy
-
và chúng ta sẽ tạo enemy đầu tiên.
-
Chúng ta chọn Game Object - Create Empty
-
và đặt tên là Enemy1.
-
Bây giờ bắt đầu thêm animation cho Enemy1.
-
Tôi sẽ quay lại sprites
-
shift-click vào frames của animation EnemyIdle
-
và thả chúng vào đây.
-
Chúng ta sẽ gọi là Enemy1Idle.
-
Nó sẽ tự động thêm component
-
mà chúng ta cần và chúng ta sẽ thêm
-
frame khác của animation này cho nó trông tốt hơn.
-
Thêm animation Attack.
-
Chúng ta có thể nháy đúp để xem nó hoạt động
-
Và của chúng ta đây, trông khá tốt.
-
Bây giờ hãy thêm box collider và rigidbody.
-
Chúng ta cũng sẽ cài đặt rigidbody cho
-
enemy là Is Kinematic
-
và chúng ta thêm tag Enemy
-
và chỉ định blocking layer.
-
Chúng ta cũng sẽ thiết lập sorting layer của sprite renderer là Units.
-
Sau khi xong chúng ta có thể kéo thả enemy xuống
-
để tạo prefab của enemy đầu tiên.
-
Thay vì xóa cái này chúng ta sẽ
-
sửa đổi nó để tạo ra enemy thứ hai.
-
Đổi tên thành Enemy2.
-
Và chúng ta sẽ thả
-
frames Enemy2Idle vào.
-
Và frame Enemy2Attack.
-
Bây giờ khi chúng ta thả animation
-
tới enemy chúng ta đã tạo ra một animator controller mới.
-
Chúng ta sẽ di chuyển những thứ này tới folder Animator Controllers.
-
Tiếp theo chúng ta sẽ mở animator controller của Enemy1
-
và chúng ta sẽ thấy bên trong tất cả aniamtion
-
mà chúng ta đã thêm vào như là states.
-
Bây giờ việc chúng ta cần làm là
-
xóa Enemy2 states
-
chúng ta shift-click lên từng phần
-
và sau đó right-click để xóa chúng.
-
Bây giờ nó sẽ hỏi chúng ta có muốn xóa assets đã chọn không
-
chúng ta chọn xóa.
-
Và việc chúng ta cần làm bây giờ là
-
Enemy1 và Enemy2 sẽ chia sẻ
-
cùng state giống nhau, chúng sẽ có hai state là
-
Idle và Attack.
-
Việc chúng ta cần làm bây giờ là tạo
-
một animator override controller,
-
nó sẽ cho phép chúng ta dùng cùng một state
-
và cùng một script điều khiển nó
-
nhưng chạy khác animation
-
trong mỗi state.
-
Chúng ta sẽ chọn
-
Create - Animator Override Controller.
-
Gọi nó là Enemy2
-
Và điều đầu tiên chúng ta cần xác định
-
controller nào chúng ta cần overriding (ghi đè),
-
chúng ta chọn controller của Enemy1 và thả nó vào.
-
Và chúng ta sẽ thấy,
-
hai animation ban đầu sẽ chạy,
-
Enemy1Idle và Enemy1Attack,
-
và chúng ta sẽ ghi đè chúng với
-
Enemy2Attack
-
và Enemy2Idle.
-
Trong Enemy2 chúng ta sẽ thay đổi
-
controller của animator thành
-
dùng animator override controller.
-
Bây giờ chạy thử scene.
-
Của chúng ta đây.
-
Cuối cùng thả Enemy2 và folder prefabs
-
để tạo prefab mới.
-
Tiếp theo chúng ta xóa Enemy2 từ hierarchy
-
và lưu scene lại.
-
Chúng ta gọi nó là Main
-
và lưu vào folder Scene trống.
-
Bây giờ chúng ta đã tạo được các prefabs cơ bản
-
cho Player và Enemy
-
Bây giờ chúng ta sẽ tiếp tục tạo
-
các prefab khác mà chúng ta cần để bố trí trò chơi.
-
Trong video tiếp theo chúng ta sẽ tạo
-
floor, wall, food, soda
-
và exit prefabs.