我目前正在制作一款第一人称射击游戏,与我(玩家)一起对抗僵尸。所以我用这个功能在 map 上散布了弹药箱:
void OnTriggerEnter(Collider other)
{
AmmoSound.Play();
if (Ammo_count.LoadedAmmo == 0)
{
Ammo_count.LoadedAmmo += 10;
this.gameObject.SetActive(false);
}
else
{
Ammo_count.CurrentAmmo += 10;
this.gameObject.SetActive(false);
}
}
这段代码非常有效,因为我的角色上有一个网格碰撞器,即“是触发器”和“凸面”;但我遇到的问题是我的僵尸也能够拾取弹药。这会在我的脚本中产生其他几个问题。那么有什么办法可以阻止僵尸拾取弹药呢?僵尸网格碰撞器不是“触发”;但它仍然可以拾取弹药。
最佳答案
解决您的问题的最简单方法是使用评论中提到的标签。将“玩家”标签添加到您的玩家游戏对象并将您的弹药拾取代码包装在 if 语句中,如下所示:
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "player")
{
AmmoSound.Play();
if (Ammo_count.LoadedAmmo == 0)
{
Ammo_count.LoadedAmmo += 10;
this.gameObject.SetActive(false);
}
else
{
Ammo_count.CurrentAmmo += 10;
this.gameObject.SetActive(false);
}
}
}
要回答所写的问题:您可以通过修改 layer collision matrix 来忽略某些冲突。 。例如,您可以在弹药箱上应用一个名为“拾取”的图层,在僵尸上应用一个名为“敌人”的图层。然后,您可以修改层碰撞矩阵,以便敌人和拾取层不会相互作用。
关于c# - 如何让一些碰撞器忽略 Unity 3D 中的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250174/