【问题标题】:Load Scene when Enemy Collides with Player-Unity当敌人与 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 中。还是没有运气

标签: c# unity3d collision


【解决方案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(场景名称)打开它 点击“文件”(左上角) 单击“构建设置”选项 单击“添加打开场景按钮” 确保列出并检查要添加的场景 点击“构建”(在右下角)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 2022-01-11
      相关资源
      最近更新 更多