Unity - 两种不同类型的碰撞器之间的检测不起作用



我在gameobject中有两种不同类型的对撞机:一个用于触发的球形对撞机和一个用于命中光线投射的胶囊对撞机。我有这个OnTriggerEnter代码,但是当玩家进入球体触发器时没有任何反应。我做错了什么?

public GameObject canvasTesoroFoto;
public GameObject canvasTesoroDatos;
private GameObject Player;
public SphereCollider sCollider;
public CapsuleCollider cCollider;
void Start()
{
Player = GameObject.FindGameObjectWithTag("Player");
sCollider = GetComponent<SphereCollider> ();
cCollider = GetComponent<CapsuleCollider> ();
}
void OnTriggerEnter(Collider other)
{
if (other == sCollider) {
if (other.gameObject.tag == "Player") {
canvasTesoroFoto.SetActive (true);
canvasTesoroDatos.SetActive (true);
}
} 
if (other == cCollider) {
Debug.Log ("HitCollider");
return;
}
}

要使其正常工作,您需要:

  • 在障碍物中:球体对撞机与被扳机检查

在播放器中:

  • 对撞机
  • 刚性车身

此外,如果 scrip 在障碍物中,则对撞机other将指玩家而不是障碍物。所以你应该直接这样做:

void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player") {
canvasTesoroFoto.SetActive (true);
canvasTesoroDatos.SetActive (true);
}
}

根据您的评论。在这种情况下,您应该考虑在玩家的对撞机中添加触发器,以检测障碍物的球体,并将触发器留给胶囊。

如果您需要触发障碍物中的两个碰撞体,您可以做的是创建一个球体游戏对象作为障碍物的子项,使其透明并在那里添加脚本和球体碰撞体。然后将对撞机保持在障碍物本身中。然后,如有必要,您可以在球体中的脚本和障碍物之间交换信息。

但据我所知,没有办法区分游戏对象中的哪个碰撞体触发OnTriggerEnter()如果两者都被选中"是触发的">

编辑:根据您的评论,我想象一种情况,即对撞机的 GameObejct 是某种敌人,可能会被光线投射击中,同时可能会与玩家坠毁(例如从他身上夺走生命(。

最好的方法是触发玩家的碰撞体,在附加到玩家的脚本中检测敌人的球体对撞机。然后取消选中是触发敌人中的球体对撞机。只需离开即可触发胶囊对撞机以检测光线投射。

在本教程中,您有一个很好的例子:

https://unity3d.com/learn/tutorials/s/survival-shooter-tutorial

确保玩家的游戏对象也附加了碰撞体

最新更新