Để mở rộng câu trả lời của Tetrad, hãy xem xét một kịch bản như thế này:
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
Sau đó, bạn có thể tạo một đối tượng gọi là "GameSystem" trong thư mục gốc của cảnh. Các thành phần duy nhất mà nó sẽ có là thành phần biến đổi tích hợp (đặt vị trí của nó thành gốc, xoay của nó thành nhận dạng và tỷ lệ của nó thành một; không phải là vấn đề, nhưng đó là cách thực hành tốt). Đã đính kèm thành phần GameSystem vào đối tượng đó.
Bây giờ bạn có thể truy cập đối tượng toàn cầu của mình bằng cách sử dụng GameSystem.Instance.blah (). Các phương thức xử lý sự kiện của nó được Unity gọi tự động vì nó xuất phát từ MonoBehavior và tồn tại như một thành phần. Bạn có thể thêm các trường vào đó để tham chiếu các đối tượng hoặc thành phần trò chơi khác và kết nối chúng trong chế độ xem phân cấp đối tượng Unity.
Vâng, đây là tất cả một chút "kỳ lạ." Nó có thể cảm thấy một chút bẩn thỉu khi phải tạo ra một đối tượng (thậm chí có một biến đổi) mà luôn luôn chỉ là một đơn vị toàn cầu. Tuy nhiên, đó là những gì Unity yêu cầu để tạo các đối tượng toàn cầu nhận thông báo Cập nhật và có thể thao tác với trình chỉnh sửa thuộc tính Unity mặc định.