Fut*_*ake 3 c# triggers unity-game-engine mesh-collider
我有一个附加到一个盒子的脚本,该盒子有两个用于物理的碰撞器,一个(稍大)用于当我的玩家走过它时检测 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;
}
}
Run Code Online (Sandbox Code Playgroud)
主要问题 OnTriggerEnter是OnControllerColliderHit从未被调用,其他触发事件也未被调用。
请参阅下面的盒子设置及其组件的图像:
请参阅此处,了解我的玩家应该调用该框的OntriggerEnter或函数:OnControllerColliderHit
编辑我根据@Programmer的建议修改了所有元素。但OnControllerColliderHit事件仍然没有被调用..(注意这个函数附在盒子上)
关于如何设置场景和代码,存在 3 个问题:
1 . 你缺少一个Rigidbody. 它应该附加到“立方体”游戏对象,因为无法使用角色控制器将刚体附加到游戏对象。
2 . 您有两个 BoxCollider 附加到一个游戏对象(“立方体”)。不要这样做。这可能会导致许多问题,包括回调函数被多次调用或根本不被调用。
当你同时需要触发和非触发碰撞器时该怎么办?
创建一个空的子游戏对象并将触发器放在那里。你可以这么做。
3 . 你正在使用CharacterController所以你应该删除回调OnTriggerXXX函数。使用时CharacterController建议使用其回调函数OnControllerColliderHit。
void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
......
}
Run Code Online (Sandbox Code Playgroud)
4 . CharacterController 并不意味着用作触发器。它们用于检测碰撞。
您有两个选项可以让它检测触发器:
A。从“Cube”对象中删除 isTrigger
或者
B. 在CharacterController下添加一个空的子GameObject,然后向其中添加CapsuleCollider或任何其他碰撞器。您不必将其标记为 isTrigger,因为“Cube”已经标记为这样。您也不应该将 Rigidbody 附加到该子碰撞器上。
创建一个名为“CC”的新层,并使CharacterController 和新的子游戏对象位于“CC”层中。转到物理碰撞矩阵设置,使“CC”层不能与“CC”层发生碰撞。这将确保CharacterController不会检测到来自子对象的碰撞。
您现在可以使用OnTriggerXXX回调函数来检测CharacterController 和“Cube”对象之间的碰撞。
| 归档时间: |
|
| 查看次数: |
5291 次 |
| 最近记录: |