Unity在碰撞后修改组件属性

时间:2014-06-10 17:35:17

标签: c# unity3d collision unity-components

我试图在碰撞后修改类组件的属性, 但财产似乎没有设定。

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 () {
    }
}

1 个答案:

答案 0 :(得分:1)

确保您每次碰撞都在查看相同的Component组件实例。如果此组件附加到多个对象,则每个对象都会有自己的collideOnce变量。

这样做的好方法是明确标记每个对象,分配一个ID,例如

Guid ID = Guid.NewGuid();

还要确保您正在碰撞的对象具有正确的组件,以防止NullReferenceException,并且您正确地退出了碰撞。您可能想切换到OnCollisionEnter。

最后,请确保您没有在其他地方设置该值为false。

相关问题