< Return to Video

2D Roguelike 2 of 14 : Animations

  • 0:02 - 0:06
    Chào mừng trở lại với loạt
    video game scavengers.
  • 0:06 - 0:08
    Trong video trước, chúng
    ta đã xem xét thiết lập
  • 0:08 - 0:10
    dự án và trình diễn sản phẩm hoàn chỉnh.
  • 0:11 - 0:14
    Trong video này, chúng ta sẽ tạo animation
  • 0:14 - 0:16
    cho người chơi (player) và kẻ địch (enemy)
  • 0:16 - 0:18
    từ sprite sheet
  • 0:18 - 0:21
    và thiết lập player và enemy prefabs
  • 0:22 - 0:24
    Hãy tạo một new scene
  • 0:27 - 0:31
    và chúng ta sẽ bắt đầu tạo player prefab
  • 0:31 - 0:33
    cùng với animations của player
  • 0:34 - 0:37
    Chúng ta chọn Game Object - Create Empty
  • 0:39 - 0:41
    và chúng ta sẽ có bảng Player hiện ra
  • 0:43 - 0:46
    Trong folder Sprite
    chúng ta có một sprite sheet
  • 0:46 - 0:49
    bây giờ chúng ta cắt nó
  • 0:49 - 0:50
    thành nhiều sprites nhỏ
  • 0:50 - 0:53
    Để biết thông tin thêm
    về sprite sheets và sprites
  • 0:53 - 0:55
    bạn có thể xem ở link bên dưới
  • 0:55 - 0:57
    Trong trường hợp này chúng ta sẽ lấy
  • 0:57 - 1:00
    frames đầu tiên
  • 1:00 - 1:02
    nó là player idle animation,
  • 1:02 - 1:04
    và tôi đã làm điều đó bằng việc
    click vào frame đầu tiên
  • 1:04 - 1:06
    và sau đó shift-clicking
    đến farme cuối cùng mà tôi muốn
  • 1:06 - 1:08
    Tôi sẽ lấy những thứ này rồi bỏ chúng vào đây
  • 1:08 - 1:09
    tới player prefab
  • 1:10 - 1:11
    và sau đó ta đặt cho nó một cái tên
  • 1:11 - 1:14
    chúng ta sẽ gọi nó là PlayerIdle
  • 1:14 - 1:16
    Đây sẽ là animation sẽ chạy khi
  • 1:16 - 1:18
    player không làm bất cứ thứ gì
  • 1:18 - 1:20
    Chúng ta sẽ đặt cái này vào folder Animations
  • 1:21 - 1:23
    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)
  • 1:23 - 1:26
    được thêm vào game object, một là sprite renderer (kết xuất đồ họa),
  • 1:26 - 1:29
    nó sẽ hiển thị các frame hiện tại
  • 1:29 - 1:33
    Và một animator, nó sẽ cho phép chúng ta chạy animation.
  • 1:33 - 1:35
    Khi chúng ta frames vào
  • 1:35 - 1:38
    hai components này, nó sẽ yêu cầu chúng ta
  • 1:38 - 1:42
    lưu animation (cái mà chúng ta đã lưu)
    vào folder Animations con
  • 1:42 - 1:45
    Nó cũng tạo ra animator controller,
  • 1:45 - 1:47
    cho phép chúng ta quản lí
  • 1:47 - 1:49
    animation đang chạy hiện tại.
  • 1:49 - 1:52
    Chúng ta sẽ di chuyển nó đến folder Animator Controllers
  • 1:53 - 1:55
    Và chúng ta sẽ thêm một số animations nữa cho player.
  • 1:56 - 1:57
    Hãy trở lại sprites.
  • 1:58 - 2:00
    Và trong trường hợp này tôi sẽ chọn
  • 2:02 - 2:05
    hai PlayerChop animation frames,
  • 2:05 - 2:07
    thả chúng vào player,
  • 2:07 - 2:09
    và chúng ta sẽ đặt tên là PlayerChop.
  • 2:10 - 2:13
    Chúng ta sẽ đặt nó vào folder Animations.
  • 2:17 - 2:19
    Bây giờ để ý sẽ thấy khi chúng ta làm như vậy sẽ không thêm
  • 2:19 - 2:21
    một animator controller khác nữa, thay vào đó
  • 2:21 - 2:24
    sẽ thêm một animation
  • 2:24 - 2:26
    vào animator controller đã tồn tại trên player.
  • 2:26 - 2:29
    Chúng ta sẽ làm lại với PlayerHit animation.
  • 2:34 - 2:37
    Tiếp theo chúng ta có thể kiểm tra để chắc chắn là chúng hoạt động.
  • 2:40 - 2:43
    Và chúng ta có thể thấy PlayerIdle đang chạy.
  • 2:43 - 2:45
    Bây giờ animation của chúng ta hơi nhanh
  • 2:45 - 2:47
    nên chúng ta sẽ mở nó
  • 2:47 - 2:50
    bằng việc click đúp vào animaor controller,
  • 2:52 - 2:54
    làm rõ trạng thái PlayerIdle
  • 2:54 - 2:57
    chúng ta chỉ cần cài đặt speed thành 0.5,
  • 2:57 - 2:59
    nó sẽ chạy với một nửa tốc độ bình thường.
  • 2:59 - 3:01
    Lưu ý rằng hai animations khác của chúng ta
  • 3:01 - 3:03
    cũng vừa mới được thêm vào states,
  • 3:03 - 3:05
    và trong loạt series sau này chúng ta sẽ
  • 3:05 - 3:07
    học cách để thay đổi
  • 3:07 - 3:10
    giữa các states bằng script.
  • 3:10 - 3:11
    Bây giờ hãy kiểm tra nó.
  • 3:14 - 3:15
    Đây.
  • 3:17 - 3:19
    Với những animations chudng ta đã tạo cho Player
  • 3:19 - 3:21
    chúng ta sẽ tiếp tục và áp dụng một tag
  • 3:21 - 3:25
    cho player tên là Player.
  • 3:25 - 3:27
    Bây giờ tag Player đã được xác định trước
  • 3:27 - 3:29
    trong tất cả projects Unity, chúng ta cũng sẽ thêm
  • 3:29 - 3:32
    vài tag nữa như là food, exit,
  • 3:32 - 3:34
    enemy và soda.
  • 3:34 - 3:36
    Vậy là đã xong thêm tag
  • 3:38 - 3:42
    và gõ vào những trường này.
  • 3:43 - 3:45
    Chúng ta sẽ cài đặt tag Player
  • 3:45 - 3:47
    và chúng ta cũng thiết lập layer (lớp).
  • 3:47 - 3:49
    Đây là layer mặc định của chúng ta,
  • 3:49 - 3:53
    và chúng ta thêm một layer gọi là Blocking Layer (layer chặn).
  • 3:53 - 3:55
    Đây là layer mà trên nó
  • 3:55 - 3:57
    tất cả các collisions (va chạm) được kiểm tra
  • 3:57 - 3:59
    và chúng ta sẽ chọn nó
  • 3:59 - 4:01
    cho player, và chúng ta thêm nó theo cách tương tự,
  • 4:01 - 4:04
    bằng việc chọn Add Layer và gõ vào đó.
  • 4:04 - 4:06
    Chúng ta sẽ tiếp tục chọn blocking layer.
  • 4:06 - 4:08
    Chúng ta sẽ thêm một layer nữa
  • 4:08 - 4:10
    liên quan đến player,
  • 4:10 - 4:13
    chúng ta sẽ thiết lập sorting layer cho sprite renderer.
  • 4:13 - 4:16
    Bây giờ chúng ta đã có một số layer xác định trước ở đây,
  • 4:16 - 4:19
    chúng ta có Floor layer, nó sẽ là background.
  • 4:19 - 4:21
    và Item layer, nó sẽ được hiển thị phía trước floor,
  • 4:21 - 4:23
    nó chính là food và soda.
  • 4:23 - 4:26
    Và sau đó là Units layer cho player và enemy.
  • 4:26 - 4:29
    Chúng ta sẽ chỉ định player cho Units layer.
  • 4:30 - 4:32
    Tiếp theo chúng ta thêm hai component
  • 4:32 - 4:36
    tới player, chúng ta sẽ thêm box collider 2D
  • 4:36 - 4:38
    và rigidbody 2D.
  • 4:38 - 4:40
    Box collider 2D sẽ cho phép chúng ta
  • 4:40 - 4:42
    kiểm tra collision (va chạm) với người chơi
  • 4:42 - 4:44
    Và rigidbody 2D sẽ cho phép chúng ta
  • 4:44 - 4:47
    di chuyển player bằng cách sử dụng phương pháp vật lý.
  • 4:47 - 4:50
    Chúng ta sẽ cài đặt rigidbody 2D là Is Kinematic
  • 4:50 - 4:52
    để cho player không bay lên
  • 4:52 - 4:54
    và nhảy lung tung, chúng ta sẽ chỉ cho anh ta di chuyển
  • 4:54 - 4:57
    trong không gian cho phép.
  • 4:57 - 4:59
    Chúng ta sẽ điều khiển nó bằng script
  • 4:59 - 5:01
    và cài đặt nó là Is Kinematic.
  • 5:01 - 5:03
    Chúng ta cũng sẽ điều chỉnh kích thước
  • 5:03 - 5:05
    của box collider 2D
  • 5:05 - 5:07
    làm nó nhỏ hơn chút để player
  • 5:07 - 5:09
    sẽ không vô tình va chạm với
  • 5:09 - 5:12
    những thứ trong không gian lân cận,
  • 5:12 - 5:14
    chỉ khi chúng đang cố gắng để di chuyển vào một không gian
  • 5:14 - 5:17
    bị chiếm bởi một collider khác.
  • 5:17 - 5:19
    Chúng ta sẽ còn thêm một vài component khác cho player nữa
  • 5:19 - 5:21
    nhưng hiện tại bây giờ như thế này là ok.
  • 5:21 - 5:23
    Chúng ta sẽ lấy nó
  • 5:23 - 5:27
    và kéo vào folder Prefabs để lưu nó lại.
  • 5:27 - 5:29
    Bây giờ chúng ta sẽ tạo prefab
  • 5:29 - 5:32
    chúng ta tạm thời có thể xóa player từ hierarchy
  • 5:32 - 5:34
    và chúng ta sẽ tạo enemy đầu tiên.
  • 5:34 - 5:37
    Chúng ta chọn Game Object - Create Empty
  • 5:37 - 5:39
    và đặt tên là Enemy1.
  • 5:39 - 5:43
    Bây giờ bắt đầu thêm animation cho Enemy1.
  • 5:43 - 5:44
    Tôi sẽ quay lại sprites
  • 5:45 - 5:48
    shift-click vào frames của animation EnemyIdle
  • 5:48 - 5:49
    và thả chúng vào đây.
  • 5:50 - 5:52
    Chúng ta sẽ gọi là Enemy1Idle.
  • 5:53 - 5:55
    Nó sẽ tự động thêm component
  • 5:55 - 5:57
    mà chúng ta cần và chúng ta sẽ thêm
  • 5:57 - 5:59
    frame khác của animation này cho nó trông tốt hơn.
  • 6:02 - 6:04
    Thêm animation Attack.
  • 6:06 - 6:08
    Chúng ta có thể nháy đúp để xem nó hoạt động
  • 6:11 - 6:13
    Và của chúng ta đây, trông khá tốt.
  • 6:14 - 6:18
    Bây giờ hãy thêm box collider và rigidbody.
  • 6:24 - 6:26
    Chúng ta cũng sẽ cài đặt rigidbody cho
  • 6:26 - 6:28
    enemy là Is Kinematic
  • 6:28 - 6:31
    và chúng ta thêm tag Enemy
  • 6:31 - 6:33
    và chỉ định blocking layer.
  • 6:33 - 6:37
    Chúng ta cũng sẽ thiết lập sorting layer của sprite renderer là Units.
  • 6:41 - 6:43
    Sau khi xong chúng ta có thể kéo thả enemy xuống
  • 6:43 - 6:45
    để tạo prefab của enemy đầu tiên.
  • 6:49 - 6:51
    Thay vì xóa cái này chúng ta sẽ
  • 6:51 - 6:53
    sửa đổi nó để tạo ra enemy thứ hai.
  • 6:54 - 6:56
    Đổi tên thành Enemy2.
  • 6:59 - 7:01
    Và chúng ta sẽ thả
  • 7:01 - 7:03
    frames Enemy2Idle vào.
  • 7:12 - 7:14
    Và frame Enemy2Attack.
  • 7:21 - 7:23
    Bây giờ khi chúng ta thả animation
  • 7:23 - 7:27
    tới enemy chúng ta đã tạo ra một animator controller mới.
  • 7:27 - 7:31
    Chúng ta sẽ di chuyển những thứ này tới folder Animator Controllers.
  • 7:31 - 7:34
    Tiếp theo chúng ta sẽ mở animator controller của Enemy1
  • 7:34 - 7:36
    và chúng ta sẽ thấy bên trong tất cả aniamtion
  • 7:36 - 7:39
    mà chúng ta đã thêm vào như là states.
  • 7:39 - 7:41
    Bây giờ việc chúng ta cần làm là
  • 7:41 - 7:43
    xóa Enemy2 states
  • 7:43 - 7:45
    chúng ta shift-click lên từng phần
  • 7:45 - 7:49
    và sau đó right-click để xóa chúng.
  • 7:49 - 7:51
    Bây giờ nó sẽ hỏi chúng ta có muốn xóa assets đã chọn không
  • 7:51 - 7:53
    chúng ta chọn xóa.
  • 7:55 - 7:57
    Và việc chúng ta cần làm bây giờ là
  • 7:57 - 7:59
    Enemy1 và Enemy2 sẽ chia sẻ
  • 7:59 - 8:03
    cùng state giống nhau, chúng sẽ có hai state là
  • 8:03 - 8:05
    Idle và Attack.
  • 8:05 - 8:07
    Việc chúng ta cần làm bây giờ là tạo
  • 8:07 - 8:09
    một animator override controller,
  • 8:09 - 8:13
    nó sẽ cho phép chúng ta dùng cùng một state
  • 8:13 - 8:15
    và cùng một script điều khiển nó
  • 8:15 - 8:17
    nhưng chạy khác animation
  • 8:17 - 8:18
    trong mỗi state.
  • 8:18 - 8:20
    Chúng ta sẽ chọn
  • 8:20 - 8:24
    Create - Animator Override Controller.
  • 8:27 - 8:29
    Gọi nó là Enemy2
  • 8:30 - 8:32
    Và điều đầu tiên chúng ta cần xác định
  • 8:32 - 8:35
    controller nào chúng ta cần overriding (ghi đè),
  • 8:35 - 8:37
    chúng ta chọn controller của Enemy1 và thả nó vào.
  • 8:39 - 8:41
    Và chúng ta sẽ thấy,
  • 8:41 - 8:44
    hai animation ban đầu sẽ chạy,
  • 8:44 - 8:47
    Enemy1Idle và Enemy1Attack,
  • 8:47 - 8:49
    và chúng ta sẽ ghi đè chúng với
  • 8:50 - 8:52
    Enemy2Attack
  • 8:54 - 8:56
    và Enemy2Idle.
  • 8:59 - 9:01
    Trong Enemy2 chúng ta sẽ thay đổi
  • 9:01 - 9:03
    controller của animator thành
  • 9:03 - 9:06
    dùng animator override controller.
  • 9:11 - 9:13
    Bây giờ chạy thử scene.
  • 9:16 - 9:17
    Của chúng ta đây.
  • 9:18 - 9:23
    Cuối cùng thả Enemy2 và folder prefabs
  • 9:24 - 9:26
    để tạo prefab mới.
  • 9:26 - 9:28
    Tiếp theo chúng ta xóa Enemy2 từ hierarchy
  • 9:28 - 9:30
    và lưu scene lại.
  • 9:31 - 9:33
    Chúng ta gọi nó là Main
  • 9:33 - 9:36
    và lưu vào folder Scene trống.
  • 9:37 - 9:39
    Bây giờ chúng ta đã tạo được các prefabs cơ bản
  • 9:39 - 9:42
    cho Player và Enemy
  • 9:42 - 9:44
    Bây giờ chúng ta sẽ tiếp tục tạo
  • 9:44 - 9:47
    các prefab khác mà chúng ta cần để bố trí trò chơi.
  • 9:47 - 9:49
    Trong video tiếp theo chúng ta sẽ tạo
  • 9:49 - 9:53
    floor, wall, food, soda
  • 9:53 - 9:55
    và exit prefabs.
Title:
2D Roguelike 2 of 14 : Animations
Description:

more » « less
Video Language:
Arabic
Duration:
09:58

Vietnamese subtitles

Revisions