You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中C#场景切换异常:两脚本均加载同一目标场景

问题原因及解决方法

核心问题:条件判断的赋值错误

你两个脚本的Update方法里都犯了同一个低级错误——用赋值运算符=代替了比较运算符==:

// 错误写法:将collide强制赋值为true,而非判断它是否为true
if (collide = true && Input.GetKeyDown(changeSceneKey))

这个错误会导致:不管玩家有没有触发当前门的触发器,只要按下对应按键,该条件就会成立(collide = true会把变量设为true,且表达式结果本身也是true)。如果两个门的触发按键设置相同,按下按键时两个脚本都会执行场景加载,后执行的操作会覆盖先执行的,最终只会加载场景2(取决于脚本的执行顺序)。

次要问题:玩家对象处理顺序错误

你当前的代码是先加载场景,再查找Player并设置DontDestroyOnLoad,但加载场景时原场景的Player会被销毁,这时候GameObject.FindGameObjectWithTag("Player")根本找不到目标对象,等于无效操作。

解决步骤

1. 修复条件判断

把两个脚本里的条件判断改成以下两种写法之一:

  • 使用比较运算符:
if (collide == true && Input.GetKeyDown(changeSceneKey))
  • 更简洁的bool变量直接判断:
if (collide && Input.GetKeyDown(changeSceneKey))

2. 调整Player处理顺序

先获取Player并设置不销毁,再执行场景加载:

// 以SceneChange脚本为例,HouseChangeScene脚本同理修改
void Update()
{
    if (collide && Input.GetKeyDown(changeSceneKey))
    {
        player = GameObject.FindGameObjectWithTag("Player");
        DontDestroyOnLoad(player);
        SceneManager.LoadScene(3);
    }
}

3. 验证场景索引与按键设置

  • 打开Unity的File > Build Settings,确认场景列表里索引2和3对应的是你预期的场景;
  • 检查两个门对象的Inspector面板,确保changeSceneKey设置的是不同按键(如果需要用同一按键,修复条件判断后只有触发对应门的触发器时才会执行加载,不会产生冲突)。

关于重建场景索引的问题

删除场景重新添加后索引不变,是因为Unity会保留原有场景的索引(除非你手动拖动调整顺序)。但你的核心问题不在索引,先解决代码错误后再验证场景对应关系即可。

内容的提问来源于stack exchange,提问作者Mick_Ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:27