Cài đặt dùng chung
Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 25 trên 64.
Cài đặt độ khó thay đổi tất cả kẻ địch cùng lúc, nên phù hợp với một asset mà tất cả chúng cùng tham chiếu. Mỗi khung hình, từng kẻ địch đọc tốc độ từ asset, còn nút Hard trong menu ghi giá trị vào chính asset đó:
[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
public float enemySpeed = 2f;
}public class Enemy : MonoBehaviour
{
public Difficulty difficulty;
public Transform player;
void Update()
{
float step = difficulty.enemySpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, player.position, step);
}
}// DifficultyMenu.cs, liên kết với onClick của nút Hard
public Difficulty difficulty;
public void SetHard()
{
difficulty.enemySpeed = 4f;
}Các trường của kẻ địch và trường của menu đều chứa cùng một asset. Vì vậy, sau khi gọi SetHard(), trong lần Update tiếp theo, mọi kẻ địch đều đọc giá trị 4, kể cả những kẻ địch được tạo sau đó từ prefab có trường chứa asset này. Cách này hoạt động vì mỗi kẻ địch đọc difficulty.enemySpeed khi di chuyển. Kẻ địch nào sao chép giá trị này vào trường riêng trong Start thì vẫn di chuyển với tốc độ 2.
Nơi lưu thay đổi trong lúc chơi phụ thuộc vào nơi trò chơi chạy. Mỗi lần khởi động, bản dựng tải asset như lúc chúng được tạo, nên lựa chọn Hard của người chơi sẽ mất ở lần chơi tiếp theo. Để giữ lại lựa chọn, hãy lưu bằng PlayerPrefs rồi ghi lại vào asset khi trò chơi khởi động. Trong Editor, asset trong dự án chính là asset mà trò chơi thay đổi, và thay đổi vẫn còn sau khi bạn nhấn Stop, khác với các đối tượng trong scene, vốn trở về giá trị trong Inspector. Lần Play tiếp theo sẽ bắt đầu ở chế độ Hard, và asset vẫn giữ giá trị 4 cho đến khi bạn đặt lại.
Thử thách
Trung bìnhHãy chia sẻ một asset để các mũi tên thay đổi gió trên mọi chiếc thuyền.
- Trong
Sailboat, thaywindStrengthbằngpublic WindSettings wind;và cho thuyền di chuyển theowind.strength. - Trong
WindVane, thaystrengthbằngpublic WindSettings wind;. - Để các mũi tên thay đổi
wind.strength(từ 0 đến 5) và văn bản hiển thị giá trị đó, nhưWind: 3.
Nhấn Chơi rồi nhấn phím mũi tên lên: cả ba chiếc thuyền đều tăng tốc. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class WindVane : MonoBehaviour
{
public TMP_Text windText;
public float strength = 2f;
void Start()
{
Show();
}
void Update()
{
if (Keyboard.current.upArrowKey.wasPressedThisFrame)
{
strength = Mathf.Min(strength + 1f, 5f);
Show();
}
if (Keyboard.current.downArrowKey.wasPressedThisFrame)
{
strength = Mathf.Max(strength - 1f, 0f);
Show();
}
}
void Show()
{
windText.text = "Wind: " + strength;
}
}
Tất cả bài học trong Kiến trúc trò chơi trong Unity
1Thành phần, không phải hệ thống phân cấp
Thành phần nhỏTập lệnh kẻ địch cơ sởThành phần trừu tượngCác thành phần phối hợp với nhauÔn tập: tháp pháo mô-đunÔn tập: pháo nòng đôi4Dữ liệu tuần tự hóa
Lớp có thể tuần tự hóaDanh sách trong InspectorKiểu liệt kê trong InspectorÔn tập: Bảng vật phẩm rơiÔn tập: Quay vật phẩm2Giao diện trong Unity
IDamageableGiao diện và TryGetComponentGetComponentsÔn tập: phím tương tácÔn tập: đối tượng gần nhất trong tầm với5ScriptableObjects
Tài sản dữ liệuChỉ số vũ khíCài đặt dùng chungLưu gióSóng dưới dạng dữ liệuÔn tập: Cơ sở dữ liệu vật phẩmÔn tập: Mua hàng từ cửa hàng8Code có thể tái sử dụng
Phương thức mở rộngSingleton tổng quátCác hàm hỗ trợ tổng quátÔn tập: FindNearest3Sự kiện
Sự kiện C# trong UnityĐăng ký trong OnEnableCác trường UnityEventSự kiện điều khiển UIÔn tập: Cửa sổ bật lên thành tíchÔn tập: Bộ hẹn giờ cửa sổ bật lên6Lưu dữ liệu bằng JSON
JsonUtilityLưu trò chơiTải dữ liệu và giá trị mặc địnhÔn tập: các ô lưuChọn và xóa một ô lưu9Tái sử dụng đối tượng bằng pool
Vì sao cần pool đối tượngPool dùng hàng đợiObjectPool của UnityÔn tập: pool đạnTự luyện tập: Playground Unity