2016-05-12 31 views
0

我正面臨這個問題:我有三個腳本。基類(A),具有泛型的派生類(A<T> : A)和另一派生類B : A<T>。所以B -> A<T> -> AOnMouseDown內空引用

A有兩個代表。一個在協程完成時調用。另一個是我們點擊GameObject時調用的。

A如下:

public class A : MonoBehaviour { 
    […] 
    p ublic delegate int delegate_OnTimeElapsed(); 
    public delegate_OnTimeElapsed onTimeElapsed; 
    public delegate void delegate_OnMouseDown(A o); 
    public delegate_OnMouseDown onMouseDown; 
    [...] 
    public void OnMouseDown() { 
     if(onMouseDown != null) onMouseDown(this); 
    } 
    […] 
    protected IEnumerator LifeTime(){ 
     [...] 
     if(onTimeElapsed != null) onTimeElapsed(); 
    } 
    […] 
} 

現在我有一個預製附有一個B腳本,我在一個腳本實例(假設C)偵聽到返回按鍵。

C如下:

[…] 
public B prefab_Script; //Set in editor 
public void Update(){ 
    if(Return) { 
     C inst = Instantiate(prefab_Script); 
     inst.onTimeElapsed += Func_A; 
     inst.onMouseDown += Func_B; 
    } 
} 

public int Func_A(){ 
    Debug.Log(「Time Elapsed」); 
    return 0; 
} 
public void Func_B(A o){ 
    Debug.Log(「Mouse Down」); 
} 

的事情是,裏面LifeTime我得到一個正確的參考onTimeElapsed但裏面OnMouseDown我看到onMouseDownnull

任何想法?謝謝!!

+0

當您執行檢查時爲null,或當您嘗試調用時爲null? – Gui

+0

MonoBehaviour中已經定義了'onMouseDown'嗎? –

+1

也許你應該替換: ---- if(onMouseDown!= null)onMouseDown(); ------ ------- if(onMouseDown!= null)onMouseDown(this); - ------- – ORParga

回答

0

我找到了解決我的問題就在這裏:https://stackoverflow.com/a/33229734

我引述:

這是百達一個更好的方式來填補所有的參數在實例化方法,例如

實例化(預製,的Vector3 .zero,Quaternion.Identity)