Bài 4: Animation và điều khiển hành động nhân vật (Animator)

Thảo luận trong 'Unity' bắt đầu bởi Trần Văn Cường, 10/4/16.

  1. Trần Văn Cường

    Trần Văn Cường I love CNTT Thành viên BQT Thành viên BQT

    Tham gia ngày:
    8/11/15
    Bài viết:
    3,693
    Đã được thích:
    43
    Điểm thành tích:
    48
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh Viên
    Nơi ở:
    Quảng Ninh thân yêu!
    Web:

    Xem lại: Bài 3: Tạo dự án game 2D, Sprite và GameObject

    Ở phần trước chúng ta đã biết cách tạo các game object, và các sprite cho các game object. Ở phần này chúng ta sẽ tìm hiểu cách tạo một animation và điều khiển các hành động của animation đó ví dụ như đi, đứng, chạy, nhảy...


    Dự án mẫu bài này: tại đây
    link dực phòng tại đây

    III. Tạo các đối tượng cơ bản

    1. Game Object

    2. Sprite

    3. Animation


    Một animation là một hình ảnh động mô tả một đối tượng nào đó trong game.

    Ví dụ: có thể là một chiếc xe đang chạy, hay một nhân vật đang đi....

    Một animation trong Unity có thể bao gồm nhiều hành động, một hành động như vậy gọi là một clip.

    Ví dụ: một nhân vật có thể có các hành động đi, đứng, nhảy....

    Có hai kỹ thuật để tạo animation (cả 2D và 3D): đó là kỹ thuật Mã frame và kỹ thuật skeletal hay spine.

    a. Kỹ thuật tạo animation

    * Kỹ thuật Mã frame


    Đối với kỹ thuật Mã frame, người ta sử dụng một sprite cho một Mã frame của hành động.

    [​IMG] Mỗi sprite là một keyframe

    Để tạo ra chuyển động, ta sẽ vẽ một Mã frame tại thời điểm đầu và thay đổi tuần tự các Mã frame sau, chúng ta sẽ có được một animation.

    Đây là phương pháp đơn giản nhất để tạo chuyển động, nhưng lại tốn kém về bộ nhớ, vì ta phải tốn nhiều sprite cho nhiều chuyển động khác nhau.

    * Kỹ thuật skeletal hay spine hay bộ xương

    Đối với kỹ thuật này, người ta chia đối tượng ra thành nhiều sprite, mỗi sprite là một bộ phận của đối tượng (giống như 1 khúc xương của bộ xương). Để tạo ra một Mã frame mới, ta sẽ thay đổi các sprite về vị trí, độ lớn, xoay của các sprite thành phần có liên quan đến chuyển động. Sau đó kết hợp các Mã frame lại với nhau như kỹ thuật Mã frame để tạo thành các animation.

    Chúng ta có thể xem các sprite cấu tạo nên một Mã frame ở ảnh dưới.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator.jpg
    2D Spine


    Cách này có vẻ tốn thời gian hơn, nhưng lại rất là hiệu quả, đặc biệt là tiết kiệm được nhiều bộ nhớ. ( Ngoài lề một tí thì nếu trong một quy trình làm game chuyên nghiệp, cách tạo các animation này thuộc về vai trò của game designer, chứ không phải của lập trình viên. Có thể bạn là một trình viên nếu bạn đang đọc bài viết này :D )

    b. Tạo animation bằng Unity

    Do sự giới hạn về tài nguyên và thời gian nên trong bài viết này mình chỉ hướng dẫn cách tạo animation theo kỹ thuật Mã Frame. Cách tạo animation theo skeletal cũng tương tự.

    Từ phần trước chúng ta đã tạo được những Sprite cơ bản như sau:

    [​IMG]

    Bước 1: Tạo một Empty GameObject đặt tên là MainCharacter (Parent Object)

    Bước 2: Tạo một đối tượng Empty GameObject nữa, đặt tên là Animations, là đối tượng con của MainCharacter. (Đối tượng con nên đặt ở vị trí 0,0,0).

    Bước 3: Thêm Sprite Render cho đối tượng con Animations vừa tạo. Rồi chọn sprite hiển thị mặc định cho Animation này. Kết quả như sau:

    [​IMG]


    Bước 4: Chọn đối tượng MainCharacter ở cửa sổ Hierarchy, rồi chọn Menu -> Window -> Animation
    Một cửa sổ Animation editor hiện ra như sau:


    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-1.png

    * Hình chữ nhật đỏ nhỏ: nút play để xem trước animation
    * Hình chữ nhật đỏ lớn: danh sách các clip hiện thời của aniamtion
    * Hình chữ nhật vàng: thanh Mã frame


    Đầu tiên ta sẽ click vào danh sách clip rồi chọn Create New Clip, ta đặt tên clip là Running, rồi save lại ở thư mục Animations của Assets.

    Bước 5: Ở cửa sổ Animation Editor, chọn Add Curve, chọn Animations (Đối tượng con của đối tượng MainCharacter) chọn Sprite Render, chọn Sprite. (Đối với một clip bất kỳ, bước này bắt buộc phải có).

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-2.png

    Kết quả như sau, mặc định sẽ tạo ra tối thiếu là 2 Mã Frame.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-3.png

    Tiếp theo ta chọn Mã frame thứ 2, ở cửa sổ Inspector, ở component Sprite Render, ta tiến hành đổi sprite khác (RunningVolt1 thay vì RunningVolt0). Chọn nút được bao quanh bởi ô tròn đỏ, rồi chọn Sprite khác từ cửa sổ mới hiện ra.

    [​IMG]


    Bây giờ, chúng ta chỉ cần click đúp vào thanh Mã Frame (Thanh có ô vuông màu vàng ở hình trước) để thêm các Mã frame và kéo thả các Mã frame sao cho thời gian phù hợp để có được chuyển động cần thiết.

    [​IMG]


    Ngoài thay đổi sprite chúng ta có thể thay đổi Transform (Translate, Scale, Rotation) cho sprite tại mỗi Mã frame, bằng cách thêm Curve Transform cho đối tượng Animation như hình:

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-4.png

    Sau đó ta chỉ việc chọn các Mã frame, rồi đặt các giá trị transform cho phù hợp theo ba trục x, y, z.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-5.png

    Tương tự ta sẽ tạo các clip Jump (nhảy), Idle (trạng thái nghỉ) cho đối tượng.


    Chú ý:

    - Ta sẽ thay đổi transform và sprite render của đối tượng con Animation chứ không thay đổi transorm và sprite render của đối tượng cha là MainCharacter.
    Giải thích: animation sẽ làm thay đổi transform của sprite, nên nếu thêm trực tiếp vào đối tượng cha, sau này thêm thành phần vật lý, hoặc áp dụng các phép transform vào sẽ bị sai, hoặc mất tác dụng.


    - Đối với các hành động nhảy chúng ta sẽ không thay đổi vị trí các Mã frame, vì làm như vậy khi thêm thành phần vật lý vào đối tượng cha, lúc nhân vật nhảy, hình ảnh của nó nhảy lên nhưng vị trí của nó để tính vật lý (theo đối tượng cha) vẫn nằm ở dưới hoặc thấp hơn hình ảnh --> Không đúng thực tế.
    Đối với hành động nhảy này, ta chỉ cần chọn sprite đang ở tư thế nhảy mà thôi.


    - Một Clip bất kỳ, phải có tối thiểu 2 Mã frame.

    Như vậy chúng ta đã có 3 clip cho animation của đối tượng MainCharacter.

    c. Điều khiển các hành động nhân vật - Animator

    Ở phần trên chúng ta đã tìm hiểu cách tạo các clip hay các hành động của một animation. Với một animation như vậy ta sẽ có một Controller (MainCharacter.controller) đi kèm theo. [Hoặc nếu chưa có, chúng ta có thể add thêm và kéo thả các clip này vào :D).

    Phần này ta sẽ hướng dẫn cách chuyển qua lại giữa các hành động bằng máy trạng thái.


    [​IMG]

    Ở cửa sổ Hierarchy chọn đối tượng MainCharacter, chọn Menu, chọn Window, chọn Animator, cửa sổ Animator sẽ xuất hiện như sau:
    (Hoặc chúng ta có thể click đúp vào MainCharacter.controller cũng có kết quả tương tự.)


    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-6.png

    Danh sách các state, mỗi state tương ứng với một clip


    Click chuột phải vào state Idle, chọn Set Default để thiết lập state mặc định cho đối tượng.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-7.png

    Chọn Make Transition, sau đó đưa chuột đến trạng thái đích. Với mỗi transition vừa tạo, có nghĩa rằng nhân vật từ trạng thái hiện tại có thể chuyển đổi trực tiếp qua trạng thái đích. Kết quả thu được ta gọi là máy trạng thái hay sơ đồ chuyển đổi trạng thái.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-8.png

    Khi đối tượng được load lên, trạng thái mặc định sẽ được thiết lập, vậy lúc nào thì sẽ chuyển qua trạng thái khác ?? Chúng ta sẽ tạo thêm các tham số, và dựa vào giá trị các tham số này để chuyển đổi các trạng thái.

    Chú ý: ở đây để cho đơn giản, ta thiết lập 3 trạng thái có thể chuyển qua lại trực tiếp với nhau.

    Ta sẽ tạo ra 3 tham số kiểu bool là isJump, isIdle, isRunning để điều khiển.

    [​IMG]


    Để thiết lập điều kiện cho một transition, ta click chọn transition đó (transition được chọn chuyển qua màu xanh), ở cửa sổ Inspector, mục thuộc tính Conditions (điều kiện) ta sẽ thiết lập giá trị của các tham số, để xác định lúc nào thì chuyển trạng thái.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-9.png

    Ở đây, chúng ta chọn isRunning = true.

    animation-va-dieu-khien-hanh-dong-nhan-vat-animator-10.png

    Ta có thể thêm các điều kiện khác (trường hợp chuyển đổi phụ thuộc nhiều điều kiện) bằng cách nhấn dấu cộng hoặc dấu trừ để bỏ bớt một điều kiện.

    Vậy mỗi khi ta set giá trị tham số isRunning = true, trạng thái nhân vật sẽ chuyển sang Running. Tương tự ta thiết lập isIdle, isJump cho các transition khác.


    Chú ý: Phần Script ta sẽ đề cập rõ, cách thiết lập giá trị các tham số này.

    Cuối cùng, ở cửa sổ Hierarchy, ta chọn MainCharacter, ở cửa sổ Inspector, mục Animator, ta bỏ chọn Apply Root Motion.


    [​IMG]


    Đến đây, chúng ta đã biết cách xây dựng một animation cho các đối tượng trong game và điều khiển qua lại các đối tượng đó. Ở phần tiếp theo mình sẽ hướng dẫn cho các bạn biết cách tạo và sử dụng Prefabs và Script và một số xử lý cơ bản.

    Xem tiếp: Bài 5: Prefab, Script và một số xử lý cơ bản
     

    Bình Luận Bằng Facebook

    data-href="https://cnttqn.com/threads/bai-4-animation-va-dieu-khien-hanh-dong-nhan-vat-animator.1517.html"