我有一个附在盒子上的脚本,盒子上有两个物理碰撞器,一个(稍大)对撞机,当玩家经过它时检测OntriggerEnters。我在框上附加了执行以下操作的脚本:
public class ColorChangeCollision : MonoBehaviour {
private GameObject Element;
private Color32 BaseColor, CollisionColor;
private Material ElementMaterial;
void Start () {
Element = this.gameObject;
BaseColor = new Color32(255,255,255,255);
CollisionColor = new Color32((byte)Random.Range(0, 255),(byte)Random.Range(0, 255),(byte)Random.Range(0, 255), 255);
ElementMaterial = Element.gameObject.GetComponent<Renderer>().material;
}
private void OnControllerColliderHit(ControllerColliderHit other)
{
Debug.Log("collision...");
ElementMaterial.color = CollisionColor;
}
private void OnTriggerEnter(Collider other)
{
Debug.Log("enter");
}
private void OnTriggerStay(Collider other)
{
Debug.Log("staying..");
}
private void OnTriggerExit(Collider other)
{
Debug.Log("left...");
ElementMaterial.color = BaseColor;
}
}
主要问题 OnTriggerEnter
或OnControllerColliderHit
不会被调用,其他触发事件也不会被调用。
有关包装盒及其组件的图片,请参见下文:
请在此处查看应该调用框的OntriggerEnter
或OnControllerColliderHit
函数的播放器:
编辑,我已将所有元素修改为@Programmer的建议。但是OnControllerColliderHit
事件仍然没有被调用。.(请注意,此函数附在包装盒上)
答案 0 :(得分:3)
关于如何设置场景和代码,存在3个问题:
1 。您缺少Rigidbody
。应该将它附加到“立方体”游戏对象上,因为不能通过CharacterController将刚体附加到游戏对象上。
2 。您有两个BoxColliders附加到一个GameObject(“多维数据集”)。 请勿这样做。这可能会导致许多问题,包括多次调用回调函数或根本不调用回调函数。
同时需要触发和非触发对撞机时该怎么办?
创建一个空的子GameObject,将触发器放在此处。你可以做到的。
3 。您正在使用CharacterController
,因此应删除 OnTriggerXXX
回调函数。使用CharacterController
时,建议使用其回调函数OnControllerColliderHit
。
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
......
}
4 。 CharacterController不是要用作触发器。它们用于检测碰撞。
您有两种选择可以使其检测触发器:
A 。从“多维数据集”对象中删除isTrigger
或
B 。在CharacterController下添加一个空的子GameObject,然后向其中添加CapsuleCollider或任何其他对撞机。您不必将其标记为isTrigger,因为“多维数据集”已被标记为isTrigger。您也不应该将Rigidbody附加到此儿童对撞机上。
创建一个名为“ CC”的新层,并将CharacterController和新的子GameObject置于“ CC”层中。进入物理collision matrix settings,并使其变为“ CC”层不会与“ CC”层碰撞。这将确保CharacterController不会检测到该子对象的碰撞。
您现在可以使用OnTriggerXXX
回调函数来检测CharacterController和“ Cube”对象之间的冲突。
答案 1 :(得分:0)
其中之一需要具有刚体才能检测到碰撞。