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

Unity中public Scene类型变量在Inspector面板无拖拽赋值字段

问题原因

Unity默认序列化系统不支持原生序列化Scene结构体,因此直接声明public Scene _newGameLevel字段时,Inspector无法渲染支持场景拖拽、选择的交互控件,只会显示不可操作的静态文本。

解决方法

按以下步骤调整即可实现场景拖拽赋值:

  • 替换字段类型,增加编辑器校验
    将原代码中Scene类型的公开字段替换为Object类型,配合编辑器宏做类型校验,避免打包报错、错误资产拖拽问题,修改后的代码参考如下(注意将类名替换为你自己的实际类名):
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class SceneLoadController : MonoBehaviour
{
    [Header("Levels To Load")]
    public Object _newGameLevel;
    private string levelToLoad;

    // 编辑器下实时校验赋值资产是否为合法场景
    private void OnValidate()
    {
#if UNITY_EDITOR
        if (_newGameLevel != null)
        {
            string assetPath = AssetDatabase.GetAssetPath(_newGameLevel);
            if (!assetPath.EndsWith(".unity"))
            {
                Debug.LogError("赋值的资产不是有效场景文件,请重新拖拽场景到该字段");
                _newGameLevel = null;
            }
        }
#endif
    }

    // 你的其他原有逻辑,比如场景加载调用
    public void StartNewGame()
    {
        StartCoroutine(sceneFader.FadeAndLoadScene(SceneFader.FadeDirection.In, _newGameLevel.name));
    }
}
  • 原有加载逻辑无需改动
    之前写的场景加载调用代码可以直接使用,不需要额外调整。
  • 完成必要配置

    所有需要通过代码加载的场景,必须先添加到File > Build Settings > Scenes In Build列表中,否则运行时会触发场景不存在的报错。需要用到的Starter场景直接从Project窗口拖入该列表、保持勾选状态即可。

调整完成后回到Inspector面板,即可直接将Project窗口里的Starter场景文件拖拽到New Game Level字段完成赋值,不需要手动输入场景名,也能避免拼写错误导致的加载失败。

如果项目使用Unity 2020.1及以上版本,也可以直接使用SceneAsset类型做字段绑定,实现逻辑和上述写法一致,注意同样需要加编辑器宏隔离SceneAsset的引用,避免打包时出现类型找不到的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:09:18