当敌人与 Player-Unity 碰撞时加载场景

Posted

技术标签:

【中文标题】当敌人与 Player-Unity 碰撞时加载场景【英文标题】:Load Scene when Enemy Collides with Player-Unity 【发布时间】:2021-03-24 08:44:26 【问题描述】:

Unity 2D。当敌人与我的玩家发生碰撞时,我正在尝试加载 EndGameScene,但我似乎无法让它工作。

我的标签是“玩家”和“敌人”。 这是current code。

代码:

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class EndGame : MonoBehaviour

    void OnCollisionEnter(Collision collision)
    

        if (collision.gameObject.name == "enemy")
        

            SceneManager.LoadScene("EndGameScene");

        
    

【问题讨论】:

这个脚本附在播放器上,对吗? 我已将它附加到玩家和 3 个敌人身上。我应该把它附加到播放器上吗? 您应该只将它附加到玩家身上,除非您希望游戏在敌人相互碰撞时结束。还要检查场景的名称。全部大写 GAME OVER 并不是一个真正的传统名称。 嗨@drewb33,您应该发布代码而不是图像,特别是如果它是外部图像,将来可能无法使用。 我确保它只添加到玩家,将场景名称切换为 EndGameScene,并将代码发布在我的 EndGame 的 cmets 中。还是没有运气 【参考方案1】:

我是 Unity 新手(距离我上次使用它已经有一段时间了),所以这个清单可能不完整,但仍然值得一试:

在 OnCollisionEnter 函数的开头添加 Debug.Log("it collides!"),这样您就可以确定它实际上正在检测碰撞。

如果它不打印任何东西:

检查您是否在玩家和敌人中都使用了碰撞器。 玩家的对撞机应该选中“Is trigger”复选框,因此它会触发 OncollitionEnter 事件。

如果它打印消息:

查看打印机信息下方是否有错误信息,可能是找不到场景。 确保您正确输入了敌人的名称/标签(我想脚本在您的播放器上)

【讨论】:

【参考方案2】:

有一个更好的方法来进行碰撞: 在这里改名字if (collision.gameObject.name == "enemy") 让它像这样if (collision.gameObject.tag == "Enemy") 并找到你场景中的敌人并为他们添加 Enemy 标签

【讨论】:

标签绝对是这里的必经之路。这是错误的。 一个好的经验法则是,名称用于标识特定对象,标签用于标识对象类型。【参考方案3】:

这可能是因为你没有将场景构建到项目的构建设置中(在统一界面中):

转到 Game Over 场景/通过转到 File>OpenScene>Scenes(文件夹)>Game Over(场景名称)打开它 点击“文件”(左上角) 单击“构建设置”选项 单击“添加打开场景按钮” 确保列出并检查要添加的场景 点击“构建”(在右下角)

【讨论】:

以上是关于当敌人与 Player-Unity 碰撞时加载场景的主要内容,如果未能解决你的问题,请参考以下文章

玩家和敌人之间的碰撞错误

没有墙壁时的敌人与墙壁的碰撞检测

UnityRPG游戏战斗怪物检测

多次检测到碰撞

超级玛丽

碰撞时中断 libgdx 操作