2014-06-10 50 views
0

我試圖修改碰撞後的類組件屬性, 但該屬性似乎沒有設置。Unity在碰撞後修改組件屬性

void OnCollisionExit2D (Collision2D myCollision) { 
    Debug.Log ("OnCollisionExit2D in Player:" + myCollision); 
    CompoMyClass compo = myCollision.gameObject.GetComponent<CompoMyClass>(); 
    if (compo.collideOnce == true) 
     return; 
    compo.collideOnce = true; 
    // it always goes here :(
} 

你知道爲什麼嗎?

public class CompoMyClass : MonoBehaviour { 
    public bool collideOnce = false; 

    // Use this for initialization 
    void Start() { 
    } 

    // Update is called once per frame 
    void Update() { 
    } 
} 
+0

你能從CompMyClass發佈代碼嗎? collideOnce的類型很重要,以及如何訪問屬性 – David

+0

這就好像我擁有的​​gameObject是一個副本,而不是原來的副本? – user3692403

回答

1

確保您正在查看每個碰撞組件的相同實例。如果這個組件被連接到多個對象,每個都會有他們自己的collideOnce變量擔心。

一個好辦法做到這一點,這將明確地標記每個對象,是分配ID如

Guid ID = Guid.NewGuid(); 

另外,還要確保你與碰撞對象具有正確的組件,以防止一個NullReferenceException,並且你正在退出碰撞。您可能想切換到OnCollisionEnter。

最後,請確保您沒有在其他地方將該值設置爲false。

+0

謝謝,它現在完美:) – user3692403