2014-11-06 71 views
-1

我試圖通過從OnTriggerEnter功能的一類到另一個class.I值已經設置,我想傳遞給價值的全球variable.This是我該怎麼辦:從OnTriggerEnter函數傳遞價值

public GameObject go; 
public bool isSomething;  
public static AClass instance; 

public void Start() 
{ 
    instance=this; 
}  

public void OnTriggerEnter(Collision other) 
{ 
    if(go.tag=="Something") 
    { 
    isSomething=true; 
    } 
} 

的問題是在另一個類,我稱之爲從AClassisSomething,我跑了統一,這給我NullExceptionReference,當我經過一個遊戲object.This是另一個類代碼:

private AClass aclass; 
public void Start() 
{ 
    aclass=AClass.instance; 
} 

public void Update() 
{ 
    Debug.Log(aclass.isSomething); //<-----------------This give Null Exception Reference 
} 

我想在我通過碰撞觸發器之後獲得一個值呃,而不是通過對撞機trigger.I不知道這是一個愚蠢的問題,但我希望有人可以給我一些想法。謝謝。 :)

+0

是ACLASS靜態類 – 2014-11-06 11:16:44

+0

沒有。只是公共類AClass,但爲了獲得該類內的組件,我在該類中編寫了公共靜態AClass實例。 – 2014-11-06 11:35:21

+0

爲什麼不只是讓你的類靜態或其方法,你想使用靜態 – 2014-11-06 11:37:10

回答

2

嘗試在清醒功能分配實例:

public void Awake() 
{ 
    instance = this; 
} 

有沒有保證,一個對象的start()函數之前或之後,除非你明確地設置執行次序另一個對象的情況。

+0

是的,我也嘗試過這一個。我忘了提及這一點。 – 2014-11-06 11:04:39

+0

@edwardau LearnCocos2D是對的,你應該在'喚醒'而不是'開始'中做這樣的分配。請記住,在「開始」之前發生「喚醒」。 – FunctionR 2014-11-06 22:10:04

0

此代碼是錯誤的。

public void OnTriggerEnter(Collision other) 
{ 
    if(go.tag=="Something") 
    { 
    isSomething=true; 
    } 
} 

解決方案

public void OnTriggerEnter(Collision other) 
{ 
    if(other.tag == "Something") 
    isSomething=true; 
}