c# - 如何让一些碰撞器忽略 Unity 3D 中的触发器

标签 c# unity-game-engine

我目前正在制作一款第一人称射击游戏,与我(玩家)一起对抗僵尸。所以我用这个功能在 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/

相关文章:

c# - 如何使用内置 C# 方法忽略 View 中的空值?

c# - 团结 : Post Request unable to connect to destination host

ios - Unity3d IOS 应用程序 : Error opening third-party application using Application. OpenURL

unity-game-engine - 旋转对象使其面向相反方向

c# - 我们的应用程序仅在从 Google Play 下载时才会崩溃。为什么?

c# - 如何修复对象旋转并使其在 Vuforia 中垂直?

c# - 我可以从 C# 应用程序发送 SMS 消息吗?

c# - 没有 MediaTypeFormatter 可用于从媒体类型为 'String' 的内容中读取类型为 'text/plain' 的对象

c# - 防止空 Gridview 数据将 " "填充到文本框中

C# 和 Word - 替换为格式