Куди долучити глобальні сценарії в Unity?


14

Що стосується Iknow in Unity, кожен сценарій повинен бути прикріплений до об'єкта. Але що стосується глобальних сценаріїв? Наприклад, у грі, схожій на тетрис, до якого об’єкта я повинен приєднати сценарій спайвера та перенесення елемента? Або елемент повинен сам керувати його рухом? Чи є найкраща практика щодо цієї проблеми?

Відповіді:


14

Щоб розширити відповідь Тетрада, розгляньте такий сценарій:

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.
}

Потім ви можете створити об’єкт під назвою "GameSystem" у корені сцени. Єдиними компонентами, які це було б, був би вбудований компонент перетворення (встановити його положення на початок, обертання на ідентичність та масштаб на один; це не важливо, але це є хорошою практикою). До цього об’єкта додано компонент GameSystem.

Тепер ви можете отримати доступ до свого глобального об’єкта, просто скориставшись GameSystem.Instance.blah (). Методи обробника подій автоматично викликаються Unity, оскільки він походить від MonoBehavior і існує як компонент. Ви можете додати до нього поля, які посилаються на інші ігрові об’єкти або компоненти, і з'єднати їх у вікні ієрархії об’єктів Unity.

Так, це все трохи "дивно". Це може бути трохи брудно, щоб створити об'єкт (який навіть має перетворення), який завжди є лише глобальним сингтом. Це те, що Unity вимагає для створення глобальних об'єктів, які отримують повідомлення "Оновлення" та маніпуляції за допомогою редактора властивостей Unity за замовчуванням.


Дякую за цю відповідь. Я згоден, це дивно! і думаю, що з цієї сторони речей там дуже мало інформації. Чи можете ви порадити деякі матеріали для читання про те, як найкраще підходити до цих класів типів «менеджер» в єдності?
UpTheCreek

@UpTheCreek: Я насправді не знаю жодного. Ми здебільшого розгадали це все на роботі пару років тому, але наші нинішні проекти є на спеціальній техніці, тому я досить застарілий з найкращими практиками Unity сьогодні. Вибачте.
Шон Міддлічч

3

Просто створіть об’єкт менеджера, на який ви покладете цей скрипт. Можливо, зробіть статичну змінну для цього сценарію, який ви призначите, Awakeщоб мати легкий глобальний доступ до нього.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.