Unity中如何控制Button显隐及修复关卡跳转相关脚本报错问题
问题原因
- 语法错误:
ScriptToVisibleButton脚本的判断条件错误使用赋值运算符=而非比较运算符==,且直接将NextLevelTeleportScript类型的变量与int类型的1比较,类型不匹配,直接触发编译报错。 - 逻辑顺序错误:
NextLevelTeleportScript的OnTriggerEnter方法中先执行了SceneManager.LoadScene(1)加载新场景,再给LvlEnd赋值,加载场景后当前场景的所有对象都会被销毁,赋值操作永远不会生效。 - 跨场景数据丢失:没有对
NextLevelTeleportScript挂载的对象做跨场景保留处理,切换场景后该对象会被销毁,新场景的ScriptToVisibleButton无法拿到有效的LvlEnd值。
解决方案
步骤1:修正ScriptToVisibleButton脚本逻辑
无需在Update中每帧判断,仅场景加载时读取一次状态即可,节省性能:
using UnityEngine; using UnityEngine.UI; public class ScriptToVisibleButton : MonoBehaviour { public Button button; void Start() { // 直接读取跨场景的静态状态值控制按钮显隐 button.gameObject.SetActive(NextLevelTeleportScript.LvlEnd == 1); } }
步骤2:修改NextLevelTeleportScript,支持跨场景状态传递
将LvlEnd改为静态字段,保证全局唯一、切换场景后数据不丢失,同时调整赋值和加载场景的顺序:
using UnityEngine; using UnityEngine.SceneManagement; public class NextLevelTeleportScript : MonoBehaviour { // 静态字段全局唯一,跨场景不会被销毁重置 public static int LvlEnd = 0; void OnTriggerEnter(Collider other) { // 先修改状态,再加载新场景 LvlEnd = 1; SceneManager.LoadScene(1); } }
内容的提问来源于stack exchange,提问作者user16968353
相关产品推荐
相关产品推荐

