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

1 ответ

Решение

Убедитесь, что вы смотрите на один и тот же экземпляр Компонента за столкновение. Если бы этот компонент был присоединен к нескольким объектам, у каждого была бы своя собственная переменная collideOnce, о которой нужно беспокоиться.

Хороший способ сделать это, который однозначно пометит каждый объект, это назначить такой идентификатор, как

Guid ID = Guid.NewGuid();

Также убедитесь, что объект, с которым вы сталкиваетесь, имеет правильный компонент, чтобы предотвратить исключение NullReferenceException, и что вы правильно выходите из конфликта. Вы можете переключиться на OnCollisionEnter.

наконец, убедитесь, что вы не устанавливаете это значение в другом месте.

Другие вопросы по тегам