Chuyển đến nội dung chính

#3 Animation trong Unity và giới thiệu về thư viện Rigged Animation Maximo


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

Bài đăng phổ biến từ blog này

#4 Unity Pathfinding, NavMesh Component, A* PathFinding Project

Thuật toán tìm kiếm đường đi là một trong số các thuật toán hay áp dụng nhiều nhất trong quá trình phát triển game. Thuật toán tìm kiếm đường đi đưa ra lời giải cho vấn đề làm cách nào đi từ điểm A đến điểm B trong một bản đồ. Hẳn các bạn làm việc với unity, khi nghĩ đến thuật toán tìm kiếm đường đi chúng ta thường sử dụng component NavMesh do unity phát triển và có mã nguồn mở đặt ở đây https://github.com/Unity-Technologies/NavMeshComponents. Và rất nhanh chóng, chúng ta có thể cài đặt vào trong game, giải quyết vấn đề như di chuyển nhân vật của chúng ta đi từ điểm A đến điểm B tránh các vật cản hay cài đặt logic cho những con Bot theo dấu nhân vật chính, hoặc một ví dụ cụ thể là cài đặt logic di chuyển theo đội hình... Việc cài đặt và ứng dụng component NavMesh như thế nào mình sẽ không đi sâu vào chi tiết mà hướng đến các vấn đề mình ứng dụng navmesh trong game như thế nào. Các bài viết về NavMesh dễ hiểu các bạn có thể tham khảo ở video sau: Như video trên, việc cài đặt ...

#2 DOTween Unity

Trong bài viết trước, mình đã thực hiện thiết kế một map lowpoly. Ở bài viết này và các bài viết sau mình sẽ thực hiện xây dựng logic game. Nội dung dự định mình sẽ xây dựng giống tựa game Merge Plane: Đại khái, mình sẽ implement logic cừu chạy xung quanh trên map của đã xây dựng với thư viện tween animation DOTween. Bài viết này không đi sâu vào kỹ thuật mà chủ yếu giới thiệu đến các bạn về thư viện DOTween. Vậy mình sẽ giới thiệu về DOTWeen một xíu nhé. DOTween gồm 2 bản, bản miễn phí và bản Pro giá 15$ tầm 350k VNĐ.  Trang chủ của nó ở đây  http://dotween.demigiant.com/ . Với thư viện này, mình có thể thực hiện các dạng animation transform thường gặp như: Move Position, Scale, Rotate, Move theo Path, Fade, Color v.v hay các hàm tiện ích như DelayCalls, Sequence… Ở bản free thì thư viện chỉ cung cấp các hàm để gọi trong code, còn ở bản Pro được cung cấp thêm giao diện cài đặt các animation trong inspector. Ngoài DOTween, mình có sử dụng qua thư viện LeanTween ...