2016-03-25 15 views
0

Diğer görsel dillerden; Birliğin aynı iç işleri takip etmediğini fark ettim.onClick.invoke, bir düğmeye tıklamakla aynı şey değildir

Düğmeli bir UI var; düğmesine bastığınızda, düğmenin adı hangi panelin görünür hale gelmesi gerektiğini gösterir; bu şekilde, hangi düğmeye basıldığına bağlı olarak çeşitli panelleri gizleyebilir ve gösterebilir ve UI'de her düğmeyi ayarlama konusunda endişelenmeyebilirim.

Şimdi, bu UI kullanırsanız çalışır; Çünkü olay sistemi itilmiş olan butonu yakalayabilir ve butonun adını saklayabilir; ancak onClick.Invoke ile aynı şeyi yaparsanız; Bu işe yaramaz.

Düğmenin çağırdığı işlev doğru çağrılır; Ancak olay sisteminde, arama düğmesinin adı hakkında hiçbir ipucu yok, çünkü UI'de hiçbir düğme çağrılmadı. onClick.Invoke UI üzerindeki tıklama/musluk aynı etkiye sahip olacak, ancak durum böyle değil

// this end up with the variable raising a null exception, when called 
// from the onClick.Invoke() 
string buttonname = EventSystem.current.currentSelectedGameObject.name; 

beklenti wa. Bunun için bir çözüm var mı? Düğmelerle aradığım işlevleri çağırmak istiyorum, ancak bazı işlemleri yapmak için düğmelerin adlarına güveniyorum.

Bu sınırlamayı aşmak için işlevleri değiştirebilirim, ancak bunu yapmadan önce, bunu yalnızca kod aracılığıyla gerçekleştirmenin başka bir yolu olmadığından emin olmak istiyorum.

+1

belki IPointerClickHandler içine bakmak ve üzerine yazmak istiyorum. Tıklanan nesne adına sahip bir eventData paramına sahiptir. –

+0

Anlıyorum, işte bu şekilde çalışıyor. VC++’da, bunun için endişelenmenize gerek yok; tıklama olayı, düğme denetleyicisine (ve bunu uygulayan başka bir denetleyiciye) dayalı olduğundan; Bu, düğmeyi basılı tutamazsınız, butona basmadan tetiklenen her bir kod yolu tetiklenmez. Birlik yaklaşımı muhtemelen farklıdır, ben bu işleyiciye bakacağım (orijinal uygulamayı görmeye yardımcı olsa da) –

cevap

0

Soru hakkında tam olarak emin değilim. OnClick işlevini çağıran düğmenin adını almak istiyorsanız. o zaman neden sadece 0cldönmek için onclick düğmesini kullanmıyorsun?

Neyse, UnityEvent.Invoke için MethodBase.Invoke ve MonoBehaviour.Invoke arasında kendinizi karıştırıyorsunuz. Şu anda UnityEvent.Invoke kullanıyorsunuz.

Diğerlerini kullanmak isterseniz, önce yalnızca ilk olarak ad alanını kullanın.

MethodBase için. Yansıtma ad alanında olduğunu söylediğinizi belirtin.

using System.Reflection;

private Action myAction =()=>{}; 

void Start() 
{ 
    System.Type ourType = this.GetType(); 

    MethodInfo mi= ourType.GetMethod("MyMethod", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); 

    if (mi!= null){ 
     myAction = (Action)Delegate.CreateDelegate(typeof(Action), this, mi); 
    } 
} 
+0

Cevabınız için teşekkürler; açıklığa kavuşturmak için diğer görsel araçlara alışığım; Örneğin, bir düğmedeki olayı çağırdığınızda, düğmenin adını ve bu düğmeyle hangi olayın tetiklendiğini geçerseniz, kod aracılığıyla gerçekleştirilir. Unity'de bunu yapamıyorum çünkü buton adı sadece basınca basıldığında etkinlik sistemine geçiyor. –

İlgili konular