我在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;
}
}
答案 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)
确保玩家的游戏对象也附加对手