Các yếu tố về chuyển động, hoạt hình lúc nào cũng xuất hiện trong game. Unity cung cấp cho chúng ta bộ công cụ animation Mecanim để thực hiện các animation cho nhân vật, ui… Như các bài viết trước, mình sẽ không đi vào lý thuyết mà tập trung vào áp dụng.
Chi tiết Mecanim các bạn có thể tham khảo ở đây:
Và đối với prototype Couting Sheep này, mình dùng mecanim để thực hiện các chuyển động chạy, nhảy của cừu. Các chuyển động nhảy, đứng im, hay chạy của cừu được lưu trữ trong animation clip của file fbx mình import vào.
Với các parametes là Moving: bool, Jump: Trigger, PickingUp: bool để kiểm soát các trạng thái animation của cừu trong lúc runtime. Các parameters này đóng nhiệm vụ là biến kiểm soát trạng thái animation của cừu, ví dụ từ trạng thái Idle sang Move mình sẽ bật biến Moving = true hay từ trạng thái Move sang Jump mình sẽ bật trigger Jump.
Việc kiểm soát các parameters thông qua code sẽ sử dụng component animator
Trong script SheepController, mình đơn giản chỉ việc gọi:
animator = GetComponent<Animator>();
animator.SetBool(“Moving”, true);
animator.SetTrigger(“Jump”);
Mở rộng hơn cho việc hệ thống hóa xử lý animation cho nhân vật, các bạn thể tham khảo thêm về mẫu thiết kế Finite State Machine. Bản thân Mecanim của unity cũng được thiết kế theo hướng Finite State Machine. Đương nhiên là chúng ta không làm chuyện “phát minh lại cái bánh xe” animator mà tận dụng Mecanim của unity để mở rộng ra cho hệ thống game của chúng ta. Phần này, mình sẽ viết cụ thể hơn ở bài viết khác nhé.
Và Như trên là cách sử dụng hệ thống animation cơ bản trong unity. Các bạn cần một file fbx trong đó bao gồm các clip animation được thực hiện bởi artist, gắn component Animator vào object cần thực hiện animation. Kéo thả các clip đại diện cho các trạng thái của object vào giao diện Animator, thêm các parameters để kiếm soát việc chuyển trạng thái qua lại của object và xử lý trong code thông qua component Animator.
Các clip animation trong file fbx của model cừu trên là các generic animation. Chúng chỉ được sử dụng để thực hiện animation của chú cừu trong prototype game này. Chúng ta không thể đưa nó vào MecAnim của object khác như bò,gà với mong muốn là thực hiện các animation giống cừu được.
Khác với Generic Animation, unity còn hỗ trợ cho chúng ta một định dạng animation khác là Humanoid Animation. Với cấu trúc Rig đánh dấu các vị trí xương khớp của model, chúng ta có thể sử dụng lại các clip animation này cho các model có cấu trúc Rig tương tự nhau.
Việc đánh dấu các khớp có thể thực hiện thủ công bằng cách kéo thả các transform của model vào giao diện Rig. Ngoài cách thủ công này, mình hay sử dụng trang Maximo có hỗ trợ công cụ auto rig và đồng thời chứa rất nhiều clip animation cho phép chúng ta tải miễn phí về sử dụng.
Trong prototype này, mình sẽ dụng một model farmer free tải ở https://3dexport.com/free-3dmodel-farmer-low-poly-179528.htm# và upload lên Maximo để tạo Rig Humanoid. Ở trang maximo, mình sử dụng hai clip idle và waving để gắn vào MecAnim của nhân vật farmer này. Các thao tác này, mình có đề cập trong clip.
Một bộ free assets về các Humanoid mình hay dùng trong các dự án công ty là https://assetstore.unity.com/packages/3d/animations/rpg-character-mecanim-animation-pack-free-65284
Assets này khá phong phú các clip animation phù hợp cho thể loại game nhập vai.
Và đó là phần chia sẽ ngắn về animation trong unity. Cảm ơn các bạn đã dành thời gian đọc bài viết. Chúc các bạn có thật nhiều game thú vị nhé.
Nhận xét
Đăng nhận xét