Unity'de global komut dosyaları nereye eklenir?


14

Birlik'te Iknow'a kadar, her komut dosyası bir nesneye eklenmelidir. Peki küresel senaryolarda durum nedir? Örneğin tetris benzeri bir oyunda hangi nesneyi spawner ve mover betiklerine iliştirmeliyim? Ya da bir eleman hareketini kendisi için mi ele almalıdır? Bu sorun için en iyi uygulama var mı?

Yanıtlar:


14

Tetrad'ın cevabını genişletmek için şöyle bir senaryo düşünün:

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

Daha sonra sahnenizin kök dizininde "GameSystem" adlı bir nesne oluşturabilirsiniz. Sahip olacağı tek bileşenler yerleşik dönüşüm bileşeni olacaktır (konumunu başlangıç ​​noktasına, kimliğe dönüşünü ve ölçeğine göre ayarlayın; önemli değil, ama iyi uygulama). GameSystem bileşenini bu nesneye ekledi.

Artık GameSystem.Instance.blah () yöntemini kullanarak global nesnenize erişebilirsiniz. Olay işleyici yöntemleri, MonoBehavior'dan türediği ve bir bileşen olarak var olduğu için Unity tarafından otomatik olarak çağrılır. Buna, diğer oyun nesnelerine veya bileşenlerine başvuruda bulunan alanlar ekleyebilir ve bunları Unity nesnesi hiyerarşi görünümünde bağlayabilirsiniz.

Evet, bu biraz "garip". Her zaman sadece küresel bir single olan bir nesneyi (hatta dönüşüme sahip) yaratmak zorunda kalmak biraz kirli olabilir. Yine de Unity, bir Güncelleme mesajı alan ve varsayılan Unity özellik düzenleyicisiyle değiştirilebilen genel nesneler oluşturmak için ihtiyaç duyduğu şeydir.


Bu cevap için teşekkürler. Tuhaf geldiğine katılıyorum! ve işlerin bu tarafında çok az bilgi olduğunu düşünüyorum. Birlik içinde bu 'yönetici' tipi sınıflara en iyi nasıl yaklaşılacağı konusunda bazı okuma materyalleri önerebilir misiniz?
UpTheCreek

@UpTheCreek: Gerçekten bilmiyorum. Çoğunlukla işimizi birkaç yıl önce anladık, ancak mevcut projelerimiz özel teknolojide, bu yüzden bugünlerde Unity en iyi uygulamalarıyla güncel değilim. Afedersiniz.
Sean Middleditch

3

Bu komut dosyasını yerleştirdiğiniz bir yönetici nesnesi oluşturmanız yeterlidir. Belki atadığınız komut dosyası için statik bir değişken yapın, Awakeböylece ona kolayca global erişim sağlayabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.