2016-05-12 88 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)