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

时间:2018-05-28 10:54:22

标签: c# unity3d

我在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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

  • 在障碍物中:检查了球体对撞机是否触发

在播放器中:

  • 对撞机
  • 一个刚体

此外,如果脚本位于障碍物中,则对手other会将玩家称为OBSTACLE。所以你应该直接这样做:

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

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

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

但据我所知,没有办法区分游戏对象中哪些碰撞器触发OnTriggerEnter()如果两者都已经过检查&#34;触发&#34;

编辑根据你的评论,我想象一下这样一种情况,即碰撞者的GameObejct是某种敌人,可能会被光线投射击中,同时可能会与玩家崩溃(对于从他身上夺走生命的例子。)

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

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

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

答案 1 :(得分:0)

确保玩家的游戏对象也附加对手