gpt4 book ai didi

c# - OntriggerEnter 未调用 playerController

转载 作者:行者123 更新时间:2023-11-30 15:53:08 30 4
gpt4 key购买 nike

我有一个附在盒子上的脚本,盒子有两个用于物理的碰撞器和一个(稍大一点)用于在我的玩家走过它时检测 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;
}
}

主要问题 OnTriggerEnterOnControllerColliderHit 从未被调用,其他触发事件也未被调用。

请参阅下面的盒子及其组件设置图像:

我的播放器应该调用方 block 的 OntriggerEnterOnControllerColliderHit 函数,请看这里:

player properties player in 3d scene

编辑 我根据@Programmer 的建议修改了所有元素。但是 OnControllerColliderHit 事件仍然没有被调用..(注意这个函数附加在盒子上)

最佳答案

关于如何设置场景和代码有 3 个问题:

1。您缺少一个 Rigidbody。这应该附加到“立方体”游戏对象,因为不能使用 CharacterController 将刚体附加到游戏对象。

2。你有两个 BoxColliders 附加到一个游戏对象(“立方体”)。 不要这样做。这可能会导致许多问题,包括回调函数被调用多次或根本不调用。

当您同时需要触发和非触发对撞机时该怎么办?

创建一个空的子游戏对象,将触发器放在那里。你可以做到这一点。

3。您正在使用 CharacterController,因此您应该删除 OnTriggerXXX 回调函数。使用CharacterController时,建议使用其回调函数OnControllerColliderHit .

void OnControllerColliderHit(ControllerColliderHit hit)
{
Rigidbody body = hit.collider.attachedRigidbody;
......
}

4。 CharacterController 并不意味着用作触发器。它们用于检测碰撞。

您有两个选项可以让它检测触发器:

一个。从“Cube”对象中移除 isTrigger

或者

B。在 CharacterController 下添加一个子空 GameObject,然后向其添加 CapsuleCollider 或任何其他碰撞器。您不必将其标记为 isTrigger,因为“Cube”已被标记为 isTrigger。您也不应该将 Rigidbody 附加到这个 child 对撞机。

创建一个名为“CC”的新层,并使 CharacterController 和新的子游戏对象位于“CC”层中。去你的物理collision matrix settings并使“CC”层不能与“CC”层发生碰撞。这将确保 CharacterController 不会检测到来自该子对象的碰撞。

您现在可以使用 OnTriggerXXX 回调函数来检测 CharacterController 和“Cube”对象之间的碰撞。

关于c# - OntriggerEnter 未调用 playerController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53021953/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com