/ / Cách viết mã bộ điều khiển nhân vật dựa trên vật lý trong Unity3D

Cách viết mã bộ điều khiển nhân vật dựa trên vật lý trong Unity3D

Bộ điều khiển nhân vật có thể giúp bạn triển khai chuyển động vật lý đơn giản trong trò chơi của mình.


Bạn có thể tiếp cận bộ điều khiển ký tự Unity3D từ nhiều góc độ. Nếu bạn sử dụng thư viện với các lớp và chức năng mạnh mẽ, thì việc tạo bộ điều khiển nhân vật dựa trên vật lý có thể là một nơi thú vị để bắt đầu phát triển trò chơi của bạn.


Bước 1: Tạo cảnh với các đối tượng Người chơi & Địa hình

bộ điều khiển nhân vật thống nhất không gian 3d

Khi Unity được mở và bạn đã tạo một dự án mới, bạn có thể bắt đầu bằng cách thêm một vài đối tượng vào cảnh của mình. Bạn có thể tạo các đối tượng này theo bất kỳ thứ tự nào bạn muốn, nhưng hãy cẩn thận để đảm bảo rằng bạn sử dụng các cài đặt chính xác. Mặc dù dự án này là cơ bản, nhưng đó là một cách tuyệt vời để bắt đầu với Unity.

Đối tượng mặt phẳng 3D cho địa hình

Đối tượng đầu tiên để thêm vào cảnh của bạn là một mặt phẳng. Nhấp chuột phải vào bên trong ngăn phân cấp, di chuột qua Đối tượng 3Dvà chọn Máy bay từ danh sách. Bạn có thể điều chỉnh kích thước của mặt phẳng để cung cấp khu vực thử nghiệm lớn hơn, nhưng bạn không cần phải làm gì khác với nó.

Mô hình trình phát đối tượng khối lập phương

Tiếp theo, đã đến lúc thêm một khối lập phương vào cảnh để hoạt động như một mô hình người chơi. Nhấp chuột phải vào bên trong ngăn phân cấp, di chuột qua Đối tượng 3Dvà chọn khối lập phương từ trình đơn thả xuống. Định vị khối lập phương mới sao cho nó nằm trên mặt phẳng mà bạn cũng đã thêm vào. Bạn cũng cần thêm một thành phần thân cứng để biến khối lập phương thành một đối tượng vật lý.

Chọn khối lập phương và đi đến Thanh tra. Bấm vào Thêm thành phần ở dưới cùng của ngăn, tìm kiếm phần thân cứng và chọn Cơ thể cứng nhắc khỏi danh sách khi nó xuất hiện. Đánh dấu vào ô Sử dụng trọng lực hộp kiểm và để nguyên phần còn lại của cài đặt.

Bạn có thể tìm tài sản Unity miễn phí trực tuyến để cải thiện dự án của mình.

Máy ảnh của người thứ ba

Cảnh của bạn phải có một máy ảnh mà bạn có thể sử dụng làm máy ảnh của người thứ ba. Định vị máy ảnh sao cho nằm ở vị trí của người thứ ba thoải mái phía trên khối lập phương của bạn. Chuyển đến ngăn phân cấp trước khi kéo và thả camera vào khối lập phương để tạo mối quan hệ cha-con. Máy ảnh sẽ tự động theo dõi khối lập phương của bạn sau khi hoàn thành việc này.

Kiểm tra nhanh

Trong khi cảnh của bạn chưa có bất kỳ mã nào, bạn có thể kiểm tra công việc bạn đã thực hiện cho đến nay. Nhấn vào Chơi ở đầu màn hình để tải trò chơi của bạn. Bạn sẽ thấy khối lập phương rơi và hạ cánh trên Mặt phẳng và Máy ảnh sẽ theo dõi khối lập phương khi nó rơi xuống.

Bước 2: Thiết lập tệp C#

Bây giờ là lúc tạo một tệp C# để bạn có thể bắt đầu lập trình một số chuyển động. Chuyển đến phần Dự án, nhấp chuột phải, di chuột qua Tạo và chọn Thư mục từ danh sách. Đặt tên cho thư mục là Scripts hoặc một cái gì đó tương tự.

Điều hướng trong thư mục mới của bạn và lặp lại quy trình, nhưng chọn C# Script từ danh sách. Bạn có thể đặt cho tệp này bất kỳ tên nào, nhưng đây cũng sẽ là tên của chức năng chính bên trong nó. Hãy chắc chắn rằng C# mới của bạn trông như thế này.

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

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

Bước 3: Sử dụng C# để tạo chuyển động tiến và lùi với vận tốc

Trước khi thêm vào các hàm trong tệp tập lệnh của bạn, hãy khai báo một số biến công khai. Đầu tiên là một Rigidbody để lưu trữ mô hình trình phát. Cũng khai báo một phao để theo dõi tốc độ di chuyển. Các biến này nằm trong lớp chính, bên ngoài bất kỳ chức năng nào.

 public Rigidbody rigidbody;
public float speed;

Tiếp theo, đã đến lúc thêm một dòng mã vào chức năng Bắt đầu. Điều này sử dụng một khai báo GetComponent để gán thành phần thân cứng của Cube cho biến thân cứng mà bạn đã tạo.

 void Start() {
    rigidbody = GetComponent < Rigidbody > ();
}

Bây giờ bạn có thể thêm một số mã để mô hình trình phát của bạn di chuyển. Mã này đẹp và đơn giản; bạn chỉ cần hai câu lệnh if, một cho chuyển động tiến và một cho chuyển động lùi. Bạn có thể sử dụng Input.GetKey để xác định thời điểm một phím đang được nhấn. Trong trường hợp này, bạn đang tìm cách nhấn phím W và S.

Nhấn một trong hai phím này sẽ thêm một lực vào vật thể cứng của khối lập phương bằng cách sử dụng vật thể cứng nhắc.AddForce. Bạn có thể tính hướng và tốc độ của lực được thêm vào bằng cách nhân vị trí trục Z của nó (transform.forward) với biến tốc độ. Không có lớp transform.backward nào để bạn sử dụng cho chuyển động lùi, nhưng điều này có thể đạt được bằng cách nhân transform.forward với -1.

 if (Input.GetKey("w")) {
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Lưu tệp C# và điều hướng quay lại Unity. Tìm tập lệnh bên trong ngăn Dự án và kéo và thả tập lệnh đó vào Khối lập phương mô hình nhân vật bên trong hệ thống phân cấp để gán tập lệnh cho đối tượng đó. Khi bạn chọn Khối, bạn sẽ thấy tập lệnh dưới dạng một thành phần trong ngăn Trình kiểm tra. Nhấp vào bên trong hộp biến thể cứng và chọn thân cứng của khối lập phương của bạn.

Giờ đây, bạn có thể sử dụng nút Phát để khởi chạy trò chơi và kiểm tra mã của mình. Nhưng đợi đã! Có vấn đề; Khối lập phương của bạn sẽ lăn thay vì di chuyển thẳng về phía trước. Quay lại trình kiểm tra của Cube, tìm thành phần Rigidbody và đánh dấu vào các ô để Freeze Rotation trên trục X và Z trước khi khởi chạy lại trò chơi. Bây giờ nó sẽ hoạt động.

Bước 4: Sử dụng C# để tạo Rẽ trái và phải bằng mô-men xoắn

Không giống như di chuyển tới và lui, việc xoay mô hình máy chơi Cube của bạn cần một lực gọi là mô-men xoắn. Bạn cần một biến khác cho việc này: một float công khai để gán giá trị mô-men xoắn.

 public float torque; 

Mã để rẽ trái và phải trong tập lệnh này cũng rất giống với mã được sử dụng để tiến và lùi. có một nếu câu lệnh cho từng hướng tìm cách nhấn phím D (rẽ phải) hoặc phím A (rẽ trái).

Bước đầu tiên trong mỗi câu lệnh if là xác định hướng rẽ bằng phương thức Input.GetAxis và gán kết quả cho một biến float. Sau đó, hãy sử dụngrigidbody.AddTorque để áp dụng lực quay cho mô hình ký tự Khối lập phương bằng cách nhân mô-men xoắn, góc quay và trục Z của khối lập phương.

 if (Input.GetKey("d")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Lưu mã của bạn và quay lại Unity để kiểm tra. Bạn có thể điều chỉnh tốc độ và thời gian tăng tốc của vòng quay mô hình trình phát của mình bằng cách chọn Khối lập phương và chỉnh sửa các biến khối lượng, lực kéo và mô-men xoắn của vật cứng trong tập lệnh của bạn. Dự án ví dụ này dựa trên 1 khối lượng, 1 lực cản và 2 mô-men xoắn.

Bước 5: Sử dụng C# để Lập trình Jumping

Là thành phần cuối cùng của bộ điều khiển nhân vật Unity này, đã đến lúc tạo bước nhảy của bạn. Việc tạo một bước nhảy phức tạp hơn so với các điều khiển cơ bản khác mà bạn đã thực hiện, với điều kiện là một bước nhảy phải có độ cao giới hạn. Bắt đầu bằng cách thêm một biến boolean riêng để theo dõi xem người chơi có nhảy hay không.

 private bool isJumping = false; 

Biến này sẽ không làm gì nếu không có câu lệnh để kiểm tra nó. Trong trường hợp này, một câu lệnh if cơ bản để kiểm tra xem biến có sai không sẽ thực hiện thủ thuật. Việc thêm điều kiện tương tự vào chuyển động khác nếu câu lệnh sẽ ngăn người chơi di chuyển trong khi nhảy.

 if (!isJumping) {
}

Việc thêm điều kiện tương tự vào chuyển động khác nếu câu lệnh sẽ ngăn người chơi di chuyển trong khi nhảy.

 if (Input.GetKey("w") && !isJumping) {
    rigidbody.AddForce(transform.forward * speed);
}

Trong câu lệnh if !isJumping, bạn cần một câu lệnh if khác, lần này để kiểm tra việc nhấn phím của nút nhảy. Đặt biến isJumping thành true là điều đầu tiên cần thực hiện trong câu lệnh if này, tiếp theo là thực hiện khai báo Hardbody.angularVelocity để loại bỏ các lực hiện đang tác dụng lên khối lập phương.

Bây giờ bạn có thể sử dụng khai báo Hardbody.AddForce để thêm lực vào khối lập phương trên trục Z của nó, tạo ra chuyển động hướng lên của một bước nhảy. Cuối cùng, đã đến lúc sử dụng một khai báo gọi để gọi một hàm khác sau 0,8 giây.

 if (!isJumping) {
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Hàm này đặt biến isJumping trở lại false để có thể thực hiện lại chuyển động/nhảy và độ trễ 0,8 giây sẽ ngăn nó kích hoạt quá sớm.

 void Move_Setter() {
    isJumping = false;
}

Bước 6: Kiểm tra mã điều khiển nhân vật của bạn

Lưu tệp của bạn và quay lại Unity để kiểm tra mã bạn đã viết. Giống như hầu hết các trình biên dịch, Unity cung cấp thông tin về lỗi và các vấn đề khác với mã của bạn để giúp bạn dễ dàng xem những gì bạn có thể cần thay đổi. Bạn có thể xem mã đầy đủ cho dự án này trên trang GitHub của chúng tôi.

Tạo bộ điều khiển nhân vật Unity

Bạn có thể chọn từ nhiều cách tiếp cận khác nhau khi tạo bộ điều khiển nhân vật trong Unity. Sử dụng vật lý là một tùy chọn, nhưng bạn cũng có thể sử dụng hệ thống điều khiển ký tự tích hợp nếu muốn.

Khám phá các tùy chọn khác nhau như thế này là một cách tuyệt vời để tìm hiểu về các công cụ như Unity.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *