Dove allegare gli script globali in Unity?


14

Per quanto riguarda Iknow in Unity, ogni script deve essere collegato a un oggetto. Ma che succede con gli script globali? Ad esempio in un gioco simile a Tetris a quale oggetto devo collegare gli script spawner e mover elemento? O un elemento dovrebbe gestirne il movimento da solo? Esistono delle migliori pratiche per questo problema?

Risposte:


14

Per espandere la risposta di Tetrad, considera uno script come questo:

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

È quindi possibile creare un oggetto chiamato "GameSystem" nella radice della scena. Gli unici componenti che avrebbe sarebbero il componente di trasformazione incorporato (imposta la sua posizione sull'origine, la sua rotazione sull'identità e la sua scala su uno; non che contino, ma è una buona pratica). Attaccato il componente GameSystem a quell'oggetto.

Ora puoi accedere al tuo oggetto globale semplicemente usando GameSystem.Instance.blah (). I suoi metodi di gestione eventi sono richiamati automaticamente da Unity poiché deriva da MonoBehavior ed esiste come componente. È possibile aggiungere campi ad esso che fanno riferimento ad altri oggetti di gioco o componenti e collegarli nella vista gerarchia degli oggetti Unity.

Sì, è tutto un po '"strano". Può sembrare un po 'sporco dover creare un oggetto (che ha persino una trasformazione) che è sempre solo un singleton globale. È ciò che richiede Unity per creare oggetti globali che ottengano un messaggio di aggiornamento e siano manipolabili con l'editor di proprietà Unity predefinito.


Grazie per questa risposta Sono d'accordo, sembra strano! e penso che ci siano pochissime informazioni là fuori su questo lato delle cose. Potresti forse consigliare alcuni materiali di lettura su come affrontare al meglio queste classi di tipo "manager" in unità?
UpTheCreek

@UpTheCreek: non ne conosco davvero nessuno. Per lo più abbiamo capito tutto sul lavoro un paio di anni fa, ma i nostri progetti attuali sono basati su tecnologia personalizzata, quindi al giorno d'oggi sono piuttosto obsoleto con le migliori pratiche di Unity. Scusa.
Sean Middleditch,

3

Basta creare un oggetto manager su cui hai inserito quello script. Forse crea una variabile statica per quello script che assegni in Awakemodo da avere un facile accesso globale ad esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.