2016-04-04 18 views
1

Sahnede zaman göstermek için kullandığım ayrı bir zaman çizelgesine sahibim. Saat ve dakika ve saniye değişkeni içerir. Belirli bir işi yapmak istiyorum, ör. Belirli bir zamanda kod yürütme yapmak istiyorum ve şu anda böyle bir şey yapıyorum. Güncellemede Bir animasyonu çalıştırmak için sürekli olarak zaman değişimini kontrol eden bir fonksiyon çalıştırıyorum.'Güncelle' kullanmaktan kaçının mı?

void Update() 
    { 
     checkTrainArriveTime(); 
     } 
     void checkTrainArriveTime() 
    { 
     if (timeManager.GetComponent<Scale2>().hour == trainArriveTimeHour && timeManager.GetComponent<Scale2>().min == trainArriveTimeMin 
      && isTrainArriveConditionExecute) 
     { 

      isTrainArriveConditionExecute = false; 
      PlayAnimationClip("Start"); 
     } 
     else if (timeManager.GetComponent<Scale2>().min != trainArriveTimeMin) 
     { 
      isTrainArriveConditionExecute = true; 
     } 
    } 

Zamanla eşleşeceği zaman bu işlev animasyonu oynatır. Şimdi 50 farklı oyun Nesnesine bağlı 50 komut dosyası var. iyi çalışıyor ama Güncelleme Etkinliğini kullanmak kesinlikle doğru bir yol değil. Kodumda, güncellemede her bir karede ve ekstra yükünde zamanı kontrol etmek gereklidir. Bu İşi yapmanın etkili bir yolu var mı?

+1

Her karenin zamanını kontrol etmek gerekiyorsa, Güncellemeyi kullanmanız gerekir. Daha iyi performans için, gerçek güncellemede GetComponent <>() kullanmamanızı tavsiye ederim. Scale2'ye referans almak için sadece bir kez kullanın ve bu referansı kullanın. –

+0

Unity'nin UnityEvent'i kullanmaya başlamanız çok muhtemel, ki bu son derece basit ve Unity'nin en iyi şeylerinden biri: http://stackoverflow.com/a/36249404/294884 – Fattie

+0

@JoeBlow Tavsiyeleriniz için teşekkürler ama benim duraklama aynı sorun. Ek olarak, zamanlayıcı hızı, kullanıcı tarafından GUI kullanılarak hızlandırılabilir. Bu yüzden benim için de geçerli değil. –

cevap

0

Mücadelenizi görebiliyorum. Haklısın, kesinlikle en iyi yol değil.

Burada görebileceğim en iyi seçenek, singleton örneğidir Animasyon Yöneticisi oluşturuyor (her uygulama için yalnızca bir örnek var).

Animasyon tetikleme mantığınızı UpdateAnimationManager yöntemine taşımanızı öneririm. Bunu yaptıktan sonra

. Örnek çağrısı AnimationManager.getInstance() yöntemine erişebileceksiniz. Bir sonraki adım, animasyon için tetiklemek istediğiniz kayıtlı oyun nesnelerinizin listesinden başka bir şey olmayan dahili kayıt defteri oluşturuyor.

ben tam senin timeManager ama muhtemelen genel timeManager mülkiyet üzerine sürükleyip bırakmak TimeManager kontrolörün bir örneği olan tahmin edebilirsiniz nedir bilmiyorum.'un Awake() yöntemine tekil veya en az hareketli atamasını dönüştürmeyi düşünün.

önemlidir için GetComponent` çağırmak oldukça pahalıdır Update()', as it has an impact on performance. içindenGetComponent() yöntemini çağırmak için değil.

Yardım edin.

+1

sadece UnityEvent'i burada kullanıyorsunuz, 5 yıldan beri mevcut. Bu son derece kolay, daha kolay olamazdı: http://stackoverflow.com/a/36249404/294884 – Fattie