当敌人与 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 碰撞时加载场景的主要内容,如果未能解决你的问题,请参考以下文章