Cách thiết kế và mã hóa thanh sức khỏe trong Unity3D
Đi tiên phong trong một số trò chơi điện tử đầu tiên trên thế giới, sức khỏe là một cơ chế phổ biến tồn tại trong nhiều tựa game phổ biến nhất hiện nay. Sức khỏe cho phép sử dụng cơ chế chiến đấu phức tạp, tạo tiến trình của người chơi và làm cho trò chơi của bạn trực quan hơn. Nhưng làm cách nào để thêm hệ thống sức khỏe vào trò chơi của riêng bạn?
Unity3D giúp dễ dàng thêm các yếu tố giao diện người dùng 2D vào trò chơi 3D, vì vậy đây là một nơi tuyệt vời để bắt đầu khám phá các thanh sức khỏe lần đầu tiên.
Mục Lục
Bạn sẽ học được gì
Nhìn bề ngoài, dự án này có vẻ không phức tạp. Mặc dù vậy, bạn sẽ cần hiểu một số khái niệm mã hóa Unity3D chính để tạo thanh tình trạng hoạt động. Điều này có nghĩa là có rất nhiều thứ để học khi bạn thực hiện dự án này, bao gồm:
- Cách tạo các phần tử/mô hình giao diện người dùng 2D trong Unity3D.
- Cách chỉnh sửa các thành phần đối tượng trò chơi bằng mã.
- Cách chia sẻ các biến giữa các tập lệnh trong Unity3D.
Bước 1: Thiết lập cảnh của bạn
Trước khi bạn có thể bắt đầu mã hóa thanh sức khỏe của mình, bạn cần một cảnh có mô hình người chơi để áp dụng. Để bắt đầu, bạn có thể làm theo hướng dẫn bộ điều khiển nhân vật Unity3D dựa trên vật lý của chúng tôi để tạo mô hình người chơi với các điều khiển cơ bản.
Với một mô hình cảnh và trình phát đã sẵn sàng, đã đến lúc thêm một thành phần giao diện người dùng. Nhấp chuột phải bên trong cửa sổ Hierarchy và chọn giao diện người dùng > Hình ảnh. Thao tác này sẽ tạo hai mục mới trong cấu trúc phân cấp của bạn: một đối tượng gốc Canvas và một đối tượng con Hình ảnh. Đổi tên đối tượng con thành Healthbar. Chọn chiều rộng, chiều cao và vị trí cho thanh sức khỏe của bạn bằng trình kiểm tra.
Bạn có thể thêm một hình ảnh giao diện người dùng lớn hơn một chút với màu được đặt thành màu đen để làm nền/viền cho thanh tình trạng. Chỉ cần đảm bảo rằng nó ở phía trên thanh sức khỏe trong hệ thống phân cấp để nó hiển thị phía sau nó.
Phần tử giao diện người dùng này hoạt động như nền tảng cho thanh sức khỏe của bạn, nhưng bạn cũng cần có một sprite để tạo hiệu ứng cho nó. Chuyển đến ngăn Dự án, nhấp chuột phải và chọn Tạo nên > 2D > yêu tinh > Quảng trường.
Chọn Healthbar từ hệ thống phân cấp và kéo sprite bạn vừa tạo vào hộp chọn Source Image bên trong trình kiểm tra. Bạn cũng có thể thay đổi Lọai hình ảnh để lấp đầy, Phương thức điền sang Ngang, và điền nguồn gốc sang trái. Bây giờ nếu bạn chạy trò chơi của mình và sử dụng Điền số tiền bạn sẽ thấy thanh sức khỏe của mình thu nhỏ và tăng lên.
Nếu bạn không thể thấy menu thành phần giao diện người dùng, hãy truy cập Cửa sổ> Trình quản lý góivà đảm bảo rằng bạn đã cài đặt gói 2D.
Bước 2: Thêm biến sức khỏe
Sẽ không có ích lợi gì khi tạo một thanh sức khỏe mà không có một biến số sức khỏe để xác định trạng thái của nó. Các tập lệnh khác cần có khả năng truy cập biến này và thật hợp lý khi đặt nó ở vị trí trung tâm. Thêm nó vào tập lệnh Kiểm soát ký tự dưới dạng float công khai:
public float playerHealth = 1.0f;
Sử dụng số float cho biến này có nghĩa là bạn có thể dễ dàng biểu thị bất kỳ tỷ lệ phần trăm nào từ 0 đến 100, để khớp với biến Số tiền lấp đầy hình ảnh giao diện người dùng của thanh sức khỏe. Ví dụ: Sức khỏe của người chơi là 0,5f bằng 50% chiều rộng của thanh sức khỏe.
Bước 3: Chia sẻ các biến giữa các tập lệnh trong Unity
Các biến thường hoạt động trong các chức năng và tập lệnh riêng của chúng. Điều này làm cho chúng không thể truy cập được từ các chức năng và tập lệnh khác trừ khi bạn thực hiện các bước để báo cho mã biết nơi tìm các biến mà bạn muốn làm việc.
Bắt đầu bằng cách tạo một tệp tập lệnh mới có tên là Sức khỏe để chứa mã. Bạn có thể kéo và thả tập lệnh này vào thành phần giao diện người dùng Healthbar được tạo ở bước đầu tiên. Đoạn mã sau đi vào hàm void Update().
Quá trình này bắt đầu bằng việc tìm đối tượng trò chơi sở hữu biến. Trong trường hợp này, đó là đối tượng Character_Model:
GameObject Character_Model = GameObject.Find("Character_Model");
Tiếp theo, đã đến lúc tìm thành phần tập lệnh chứa biến mà bạn cần làm việc.
Character_Control character_Control = Character_Model.GetComponent();
Và cuối cùng, bạn có thể trích xuất biến cụ thể mà bạn đang tìm kiếm. Trong trường hợp này, đó là biến playerHealth mà bạn đã thêm vào bộ điều khiển nhân vật của mình. Gán giá trị này cho một biến float trong tập lệnh hiện tại có tên là currentHealth.
currentHealth = character_Control.playerHealth;
Chỉ mất một vài dòng mã để có được biến bạn cần và bạn có thể áp dụng phương pháp này bất cứ khi nào bạn cần truy cập vào sức khỏe của người chơi. Mã của bạn sẽ trông như thế này sau khi bạn hoàn thành:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Health : MonoBehaviour
{
public float currentHealth;
void Start()
{
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
}
}
Bước 4: Lập trình đối tượng trò chơi UI Health Bar
Bây giờ bạn đã tạo thành phần giao diện người dùng thanh sức khỏe và có quyền truy cập vào biến sức khỏe của người chơi, đã đến lúc làm cho chúng hoạt động cùng nhau. Để bắt đầu, hãy thêm một biến tĩnh riêng sẽ chứa thành phần hình ảnh của thanh sức khỏe của bạn:
private static Image Healthbar;
Sau đó, bạn có thể gán thành phần hình ảnh cho biến này trong hàm void Start(), hàm này chỉ chạy một lần.
Healthbar = GetComponent();
Bây giờ bạn đã có tất cả các biến của mình, bạn có thể sử dụng mã từ bước trước để đặt chiều rộng lấp đầy của đối tượng giao diện người dùng thanh sức khỏe. Bạn không cần thực hiện bất kỳ chuyển đổi nào ở đây; cả sức khỏe của người chơi và lượng lấp đầy thanh sức khỏe đều là các biến float.
Healthbar.fillAmount = currentHealth;
Với mã này, thanh sức khỏe của bạn sẽ tăng và giảm dựa trên biến sức khỏe được tìm thấy trong mã Character_Control. Tuy nhiên, điều này hơi nhàm chán và nó chắc chắn có thể thực hiện được với một số màu sắc.
Bắt đầu bằng cách thêm một màu mới để làm cho thanh sức khỏe có màu xanh lục nhạt khi người chơi có nhiều sức khỏe.
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
Tiếp theo, thêm câu lệnh if để kiểm tra xem sức khỏe của người chơi có trên 0,3f, tức là 30% trở lên hay không. Nếu nó cao hơn 0,3f, hãy đặt thanh sức khỏe khớp với màu bạn vừa thêm. Nếu nó dưới 0,3f, hãy chuyển thanh sức khỏe sang màu đỏ.
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
Bước 5: Kiểm tra mã
Như bạn có thể thấy từ mã hoàn chỉnh bên dưới, dự án này khá đơn giản khi tất cả cùng nhau. Tuy nhiên, tất nhiên, bạn cần một cách để kiểm tra mã của mình.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Health : MonoBehaviour
{
private static Image Healthbar;
public float currentHealth;
void Start()
{
Healthbar = GetComponent();
}
void Update()
{
GameObject Character_Model = GameObject.Find("Character_Model");
Character_Control character_Control = Character_Model.GetComponent();
currentHealth = character_Control.playerHealth;
Healthbar.fillAmount = currentHealth;
Color greenHealth = new Color(0.6f, 1, 0.6f, 1);
if (currentHealth >= 0.3f) {
Healthbar.color = greenHealth;
} else {
Healthbar.color = Color.red;
}
}
}
Bạn có thể thêm một dòng mã vào tập lệnh Character_Control để có thể thử nghiệm. Bất cứ khi nào người chơi nhấn phím W để di chuyển về phía trước, hãy loại bỏ một lượng máu nhỏ. Bạn có thể thêm cùng một mã vào bất kỳ tập lệnh nào có quyền truy cập vào biến playerHealth để có cùng kết quả:
playerHealth -= 0.001f;
Bạn cũng có thể cân nhắc thêm các nội dung độc đáo vào dự án Unity của mình. Bạn có thể tìm thấy các tài sản Unity miễn phí trên web, mang đến cho bạn cơ hội làm sống động dự án của mình mà không phải tốn bất kỳ khoản tiền nào.
Xây dựng thanh sức khỏe trong Unity3D
Trò chơi của bạn đang bắt đầu hình thành khi bạn có một thanh máu cho nhân vật của mình. Vẫn còn rất nhiều việc phải làm, nhưng bây giờ bạn nên có một số kỹ năng chính mà bạn cần để bắt đầu đạt được tiến bộ thực sự. Tuy nhiên, tất nhiên, đọc thêm hướng dẫn sẽ không bao giờ hại.