首页 > 解决方案 > 我试图创建不应该碰撞的随机定位的对象。我的对撞机似乎没有正确检测到。我如何解决它?

问题描述

在此处输入图像描述

我有一个包含旋转立方体的预制空对象。我试图在这里做这项技术:https ://answers.unity.com/questions/356438/how-to-stop-a-collider-rotating-with-the-gameobjec.html 。我有一个正确的标签,选中了 onTrigger 复选框。

食物发生器

public class FoodGenerator : MonoBehaviour {
public GameObject food;

public int foodCount;
void Start () {
    for (int i = 0; i < foodCount; i++){
        Vector3 position = new Vector3(Random.Range(-8.0f, 8.0f), 1.0f, Random.Range(-8.0f, 8.0f));
        Instantiate(food, position, Quaternion.identity);
    }
}   

}

非旋转对撞机

public class NonRotatingCollider : MonoBehaviour {
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("Triggered", other);
        if (other.gameObject.CompareTag("Pick Up"))
        {
            Vector3 position = new Vector3(Random.Range(-8.0f, 8.0f), 1.0f, Random.Range(-8.0f, 8.0f));
            transform.position = position;
        }
    }
}

这里的 Debug.Log("Triggered") 甚至没有激活。我究竟做错了什么?

标签: c#unity3d

解决方案


如果要OnTriggerEnter调用该函数,则isTrigger必须在对撞机上启用该属性。此外,必须将刚体附加到对撞机。没有证据表明您已将刚体附加到游戏对象。如果刚体已附加此 GaeObject,请确保在两个碰撞刚体上启用 isKinematic。

当没有或只有一个碰撞刚体启用了 isKinematic 时,应调用 OnTriggerEnter。如果两个碰撞刚体都启用了 isKinematic,则不会调用 OnTriggerEnter。


推荐阅读