首页 > 其他分享 >Unity获取脚本的CustomEditor(自定义编辑)数据

Unity获取脚本的CustomEditor(自定义编辑)数据

时间:2022-08-17 18:37:49浏览次数:92  
标签:面板 自定义 CustomEditor Unity 序列化 speed public

在此之前,粗略的介绍下 CustomEditor(自定义编辑)。

Unity对于我们创建的Mono脚本提供了属性面板的展示和修改。默认情况下,Inspector面板中会显示当前脚本类的公开字段(public field),这些字段会被序列化并储存在挂载的预制上。而有些情况下我们需要自定义展示和修改面板数据展示,这时候就用到了Unity提供的CustomEditor。

CustomEditor特性:允许我们自定义当前脚本组件的Inspector检视面板。

使用方法:

1 public CustomEditor(Type inspectedType);
2 public CustomEditor(Type inspectedType, bool editorForChildClasses);

参数介绍:

inspectedType:指定自定义那个类型的面板数据

editorForChildClasses :是否子类使用同样的自定义面板,默认不使用

使用示例片段:

//TestData.cs

using UnityEngine;
/// <summary>
/// 测试代码
/// </summary>
public class TestData : MonoBehaviour
{
    [Range(0,1)]
    public float speed;
}


//TestDataEditor.cs

using UnityEditor;

/// <summary>
/// 测试代码,自定义面板数据显示
/// </summary>
[CustomEditor(typeof(TestData))]
public class TestDataEditor : Editor
{
    private SerializedProperty _speed;
    TestData _target;

    private void OnEnable()
    {
        ///方式一
        _speed = serializedObject.FindProperty("speed");

        ///方式二
        //_target = (TestData)target;
    }

    public override void OnInspectorGUI()
    {
        //将_speed数据修改加入监听
        EditorGUI.BeginChangeCheck();

        /// 方式一
        serializedObject.Update();
        EditorGUILayout.PropertyField(_speed);
        serializedObject.ApplyModifiedProperties();

        ///方式二
        //_target.speed = EditorGUILayout.FloatField("速度", _target.speed);

        //_speed数据修改结束监听,并在发生修改时,做“脏”标记
        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(target);
        }
    }
}

在开发过程中,为了给其他同学提供一些便利,通过自定义显示面板数据是很常见的一件事。但这会导致我们有时直接获取的当前组件数据时,发现不是面板上序列化储存的值。出现这种原因是因为Editor这边直接执行了ApplyModifiedProperties,这时候我们可以通过序列化对象获取想要的数据。

using UnityEngine;
using UnityEditor;

/// <summary>
/// 测试代码
/// </summary>
public class TestData : MonoBehaviour
{
    [Range(0,1)]
    public float speed;

    /// <summary>
    /// 根据使用场景调用方法
    /// </summary>
    private void TestFunc()
    {
        //序列化当前对象
        SerializedObject obj = new SerializedObject(this);
        //查找想要的数据
        var _speed = obj.FindProperty("speed");
        //进行日志输出或GUI绘制
        Debug.LogError($"原始数据:{speed},序列化后的数据:{_speed}");
    }
}

总结:我们要想在编辑器这边获取CustomEditor(自定义编辑)类的序列化数据时,只需要将当前类对象序列化即可。

资料查找:

1).Unity - Scripting API: CustomEditor

2).Unity - Scripting API: CustomEditor.CustomEditor

标签:面板,自定义,CustomEditor,Unity,序列化,speed,public
From: https://www.cnblogs.com/CLXiao-1029/p/16596308.html

相关文章

  • vue中使用自定义字体
    1、在scss文件内引入,且将scss文件导入到全局,一般都是将自定义字体作为一个单独的scss文件存放,再将该字体文件导入到全局的样式文件内,@importurl('./font.scss');,再将全局......
  • unityprofiler各记录函数
    EarlyUpdate.UpdatePreloadingLoading.UpdatePreloading:在异步加载/卸载场景,异步加载AssetBundle,加载AssetBundle中的Asset,加载Resource文件夹中资源,调用UnloadUnusedAss......
  • 搭建UnityGameFramework框架最低需求项目
    1、下载GameFramework包进入官网的下载页面下载2021.05.31版本https://gameframework.cn/download/2、新建Unity项目,然后把包导入3、新建Editor文件夹,并创建GameFr......
  • 使用自定义字体 vue electron
    1,把自定义字体包导入项目  2,font.css文件下1字体名2字体路径3,4字体样式(可省略) 3,App。vue文件中修改样式中的font-family属性   ......
  • Unity3d反射(Reflection)
    无论是VR、AR,还是游戏开发,都绕不开反射材质,一些童鞋说用反射探测器(ReflectionProbe)制作反射,总感觉地板的反射不正确,本文小姐姐就这一话题,和大家一起探讨一下反射材质的制......
  • 转载_[VS Code]Visual Studio Code 添加自定义snippet(代码段),附详细配置
    [VSCode]跟我一起在VisualStudioCode添加自定义snippet(代码段),附详细配置AddcodesnippetsforCLANGinVSCode日志:2021.12.16VSCode自v1.40起,引入新的变量......
  • vue学习之------自定义指令(全局)
    main.js中定义:定义指令的函数为:directive()指令名称:第一个参数------fontcolor被绑定的元素:回调函数的第一个参数------el指令被设置的具体值:回调函数的第二个参数----......
  • Unity csc.rsp文件
    试验版本Unity2020.3编译符号,就是#ifUNITY_ANDROID这个东西,在处理多平台多分支的情况下挺有用的,但是在ProjectSettings里面设置比较麻烦,不主动代码调用保存的话就要关编......
  • React自定义组件参数小驼峰命名提示警告 Warning: React does not recognize the `xx
    Warning:Reactdoesnotrecognizethe`xxXxx`proponaDOMelement.IfyouintentionallywantittoappearintheDOMasacustomattribute,spellitaslower......
  • Windows10企业版LTSC操作系统自定义快捷键-2022年8月16日
      第1个快捷键: Alt+空格键作用:显示或者隐藏MayeLite主窗口 MayeLite一个更轻更简洁的快速启动工具https://blog.arae.cc/post/25842.htmlhttps://github......