Nơi để đính kèm các tập lệnh toàn cầu trong Unity?


14

Theo như tôi biết trong Unity, mọi kịch bản phải được gắn vào một đối tượng. Nhưng trường hợp với các kịch bản toàn cầu là gì? Ví dụ, trong một trò chơi giống như tetris với đối tượng nào tôi nên đính kèm phần tử spawner và mover script? Hay một phần tử nên tự xử lý chuyển động của nó? Có thực hành tốt nhất cho vấn đề này?

Câu trả lời:


14

Để 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.


Cảm ơn câu trả lời này. Tôi đồng ý nó cảm thấy kỳ lạ! và nghĩ rằng có rất ít thông tin ngoài kia về mặt này. Có lẽ bạn có thể đề xuất một số tài liệu đọc về cách tốt nhất để tiếp cận các lớp loại 'người quản lý' này trong sự thống nhất?
UpTheCux

@UpTheCalet: Tôi không thực sự biết bất kỳ. Chúng tôi chủ yếu tìm ra tất cả về công việc một vài năm trước đây, nhưng các dự án hiện tại của chúng tôi là về công nghệ tùy chỉnh nên tôi khá lạc hậu với các thực tiễn tốt nhất của Unity những ngày này. Lấy làm tiếc.
Sean Middleditch

3

Chỉ cần tạo một đối tượng người quản lý mà bạn đặt tập lệnh đó vào. Có thể tạo một biến tĩnh cho tập lệnh mà bạn gán Awakeđể bạn có quyền truy cập toàn cầu dễ dàng vào tập lệnh đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.