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

能否根据条件向Unity Inspector暴露指定变量?按枚举显示单个序列化字段

实现Unity Inspector根据枚举值动态显示对应字段

这个需求完全可以实现,核心是通过Unity的Editor扩展功能自定义Inspector的渲染逻辑,以下是具体实现方案:

步骤1:保留原脚本结构

基础脚本无需大幅修改,保持现有字段和枚举定义即可:

using UnityEngine;

public class PaletteObject : MonoBehaviour
{
    [SerializeField] PaletteObjectType paletteObjectType;

    [SerializeField] CustomTile customTile;
    [SerializeField] MaterialTile materialTile;
    [SerializeField] NewAnaglpyh anaglyphTile;
    [SerializeField] EffectObject effectObject;

    public enum PaletteObjectType
    {
        CustomTile,
        MaterialTile,
        AnaglyphTile,
        EffectObject
    }
}

步骤2:编写自定义Editor脚本

在项目中创建Editor目录(无则新建),然后新建PaletteObjectEditor脚本,代码如下:

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(PaletteObject))]
public class PaletteObjectEditor : Editor
{
    public override void OnInspectorGUI()
    {
        PaletteObject targetObj = (PaletteObject)target;
        serializedObject.Update();

        // 绘制枚举选择栏
        SerializedProperty typeProp = serializedObject.FindProperty("paletteObjectType");
        EditorGUILayout.PropertyField(typeProp);

        // 根据枚举值显示对应字段
        switch (targetObj.paletteObjectType)
        {
            case PaletteObject.PaletteObjectType.CustomTile:
                EditorGUILayout.PropertyField(serializedObject.FindProperty("customTile"));
                break;
            case PaletteObject.PaletteObjectType.MaterialTile:
                EditorGUILayout.PropertyField(serializedObject.FindProperty("materialTile"));
                break;
            case PaletteObject.PaletteObjectType.AnaglyphTile:
                EditorGUILayout.PropertyField(serializedObject.FindProperty("anaglyphTile"));
                break;
            case PaletteObject.PaletteObjectType.EffectObject:
                EditorGUILayout.PropertyField(serializedObject.FindProperty("effectObject"));
                break;
        }

        serializedObject.ApplyModifiedProperties();
    }
}

关键说明

  • 自定义Editor脚本必须放在Editor目录下,Unity才会将其识别为编辑器扩展代码,不会打包进最终游戏包。
  • 使用serializedObject和SerializedProperty操作字段,能保证序列化数据的一致性,避免直接修改对象字段引发的异常。
  • 切换枚举值时,Inspector会自动刷新,仅展示当前枚举对应的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:02:37