Lập trình game với Unity như thế nào (Phần 2)?

Lập trình game với Unity như thế nào (Phần 2)?

Trước khi vào hướng dẫn thì mình sẽ nói sơ qua, animations (hình ảnh động) là một tập hợp các hình ảnh hiển thị thay phiên một hành động nào đó lặp đi lặp lại liên tục giúp tạo cảm giác chuyển động cho đối tượng, nó thường được dùng để tạo chuyển động cho các nhân vật trong game. Ở đây unity hỗ trợ các bạn trong công việc này rất mạnh nên không có gì khó khăn để tạo animations cả, ở đây mình làm trên nền 2D nha vì 3D mình không tìm thấy nguồn tài nguyên sẵn có.

1. Chuẩn bị

Đầu tiên cần chuẩn bị nguồn tài nguyên hay nói cách khác là các hình ảnh để tạo animations, nếu các bạn không có sẵn thì có thể tải ở link bên dưới:

Tải Background: cái này thì các bạn có thể tải bất kì hình ảnh nào tùy thích (mình khuyên nên tải ảnh nào liên quan đến vũ trụ để phù hợp với animations là phi thuyền nha).

Tải Animations_spaceship: tại đây.

2. Cài đặt các thông số của ảnh cho phù hợp

Đầu tiên thì các bạn kéo hoặc copy ảnh của các bạn vào thẻ Assets (nơi chứa tài nguyên để xây dựng game). Tiếp theo các bạn để ý thẻ Inspector (Nơi chứa thuộc tính của các đối tượng), đối với Backgroud và Animations thì chỉnh sửa các thông số như sau:

Background:

Lưu ý: ở phần Max Size các chọn con số vừa lớn hơn cả chiều ngang và chiều dọc của bức ảnh là được.

Animations:

Sau khi thay đổi các thông số cho phù hợp thì Apply lại.

Đối với Background thì các bạn chỉ việc kéo vào thẻ Scene là được (ở bài sau mình sẽ hướng dẫn scolling backgroud mà tạo hiệu ứng chyển động có backgroud sau, bây giờ tạm thời làm như vậy là được).

Đối với Animations thì sau khi chỉnh sửa các thông số cho phù hợp thì các bạn vào phần Sprite Editor trong thẻ Inspector nó sẽ hiển thị bảng như sau:

Các bạn vào phần Slice -> Slice để cắt ảnh.

Để chuyển động trông mượt hơn thì các bạn nên chỉnh lại chút xíu:

Các bạn kéo các đường giới hạn vào sát hình ảnh ở tất cả các phi thuyền, ở phần Custom Pivot đối với 4 bức trên các bạn chọn X:0.5Y:0.5, 4 bức dưới chọn X:0.5 - Y:0.6 (nếu không chọn được thì kéo hình tròn ở tâm lệch đi một chút rồi nhập lại). Cách này nhằm mục đích tạo một điểm làm tâm để chuyển động không bị lệch và trông mượt hơn.

Sau khi thực hiện xong nhấn Apply và thoát ra.

Animations của các bạn sẽ có dạng thế này:

Các bạn chọn 4 hình đầu tiên và kéo thả vào thẻ Scene.

Lưu lại với tên là Idle_animation.

Sau đó vào Window -> Animation -> sau đó mở 2 thẻ Animation và Animator.

Trong thẻ Animation ở phần Preview nhấn vào biểu tượng play để chạy thử.

Vậy là các bạn đã hoàn thành xong tạo Animations. Nhưng khoan, như vậy thì đơn giản quá, chúng ta làm thêm tí nữa ha.

Lí do mình chỉ chọn 4 hình đầu tiên để tạo animations là gì?

Nếu các bạn chơi game thì sẽ biết, cách chuyển động của nhân vật thì thông thường sẽ được chia thành 2 loại: chuyển động mặc định mình gọi là Idle_Animation và chuyển động lúc nhận lệnh từ người chơi gọi là Walk_Animation.

Để làm được điều này thì các bạn làm như sau:

Chọn phần Idle_Animation -> Create New Clip... đặt tên là Walk_Animation

Sau đó chọn 4 hình ảnh cuối cùng kéo thả vào vùng này trong thẻ animation:

Sau đó qua thẻ Animator sẽ thấy như sau:

Trong phần Parameters chọn cho mình như sau:

Các bạn chọn kiểu dữ liệu là Bool và đặt tên là Walk_Idle.

Ở phần này các bạn R_click -> chọn Make Transition để nối Idle_Animation tới Walk_Animation và ngược lại.

Sau đó kick vào kí hiệu mũi tên nối giữa IdleWalk

Trong thẻ Inspector ở phần Conditions kick vào biểu tượng dấu '+' và chọn cho mình như sau:

Đối với đường nối từ Idle -> Walk chọn cho mình là true.

Đối với đường nối từ Walk -> Idle chọn cho mình là false.

Sau đó là lập trình trên C#: Cách tạo thì mình đã hướng dẫn ở bài "Lập trình game với Unity như thế nào (Phần 1)?" rồi, mình không nói lại nữa. Bây giờ chúng ta sẽ sử dụng hàm Start, hàm Start có thể hiểu đơn giản là hàm để khởi tạo các giá trị đầu cho các biến, nó gần giống như là hàm khởi tạo lúc trước mình hướng dẫn lập trình trên Console.

Các bạn viết như sau: (đoạn code di chuyển mình cũng đã giới thiệu ở bài trước rồi nên không giải thích lại)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DiChuyen : MonoBehaviour
{
    public float speed = 3f;   //khai báo speed
    Animator anim;          //tạo 1 biến với kiểu dữ liệu là animator

    // Start is called before the first frame update
    void Start()
    {
        anim = gameObject.GetComponent<Animator>();     //khởi tạo giá trị cho biến
    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKey(KeyCode.A))
        {
            transform.Translate(Vector3.left * speed * Time.deltaTime);
            anim.SetBool("Walk_Idle", true);    //nếu nhấn phím A thì trả về giá trị true cho Walk_Idle để thực hiện Walk_animation
        }
        else if (Input.GetKey(KeyCode.D))
        {
            transform.Translate(Vector3.right * speed * Time.deltaTime);
            anim.SetBool("Walk_Idle", true);    //nếu nhấn phím D thì trả về giá trị true cho Walk_Idle để thực hiện Walk_animation
        }
        else if (Input.GetKey(KeyCode.S))
        {
            transform.Translate(Vector3.down * speed * Time.deltaTime);
            anim.SetBool("Walk_Idle", true);   //nếu nhấn phím S thì trả về giá trị true cho Walk_Idle để thực hiện Walk_animation
        }
        else if (Input.GetKey(KeyCode.W))
        {
            transform.Translate(Vector3.up * speed * Time.deltaTime);
            anim.SetBool("Walk_Idle", true);   //nếu nhấn phím W thì trả về giá trị true cho Walk_Idle để thực hiện Walk_animation
        }
        else
        {
            anim.SetBool("Walk_Idle", false);   //ngược lại không nhấn hoặc nhấn phím khác thì trả về false để thực hiện Idle_animation
        }
    }
}

Sau khi viết xong các bạn Save qua Unity và kéo thả vào phi thuyền.

Ở đây, các bạn có thể thấy mình khai báo Speed là public và ở ngoài 2 hàm startuptade, mục đích của việc này là các bạn có thể điều chỉnh tốc độ của game 1 cách trực tiếp mà không cần phải sửa lại code bằng cách như sau:

Vậy là xong, các bạn play và chạy thử game sẽ thấy có 2 animations: lúc không thao tác thì Idle_animation sẽ hiển thị, lúc điều khiển di chuyển thì Walk_animation sẽ hiển thị.

Nếu tốc độ của Walk_animation quá nhanh thì có thể điều chỉnh tại đây:

Tạm kết

Kết thúc phần 2 mình đã hướng dẫn cách để các bạn làm animation trên nền 2D. Trong phần tiếp theo, mình sẽ hướng dẫn scolling backgroud mà tạo hiệu ứng chyển động có backgroud sau nhé.

Chúc các bạn thành công và hẹn gặp lại

Tài liệu tham khảo:

1.Tại đây : Youtube

2.Tại đây : Blog

3.Tải thêm nhiều Animations khác: Tại đây