0

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

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

1 回答 1

1

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

执行此操作的一个好方法是明确标记每个对象,即分配一个 ID,例如

Guid ID = Guid.NewGuid();

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

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

于 2014-06-10T20:38:02.357 回答