Unity3D :绑定属性更改时接收回调

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

绑定属性更改时接收回调

版本: 2021.3+

此示例演示如何在绑定序列化属性更改时接收回调。

示例概述

本示例创建一个自定义编辑器窗口,该窗口具有绑定到游戏对象
在一个现场
.如果游戏对象的名称为 ,则文本字段标签的背景色将变为深红色。GameObject

您可以在此 GitHub 存储库中找到该示例的完整文件。

先决条件

本指南适用于熟悉 Unity 编辑器的开发人员,用户界面
工具包和 C# 脚本。在开始之前,请熟悉以下内容:

  • TrackPropertyValue()
  • Unbind()

创建绑定以接收回调

创建一个 C# 脚本,该脚本:

  • 每当序列化属性的值更改时调用该方法CheckName()
  • 使用扩展方法注册方法TrackPropertyValue()
  • 在另一个属性上再次呼叫之前调用。Unbind()TrackPropertyValue()

A 在任何给定时间只能跟踪一个属性。VisualElement

  1. 使用任何模板在 Unity 中创建项目。
  2. 在你的项目窗口
    ,创建一个名为用于存储文件的文件夹。callback-SerializedProperty-changes
  3. 回调序列化属性更改文件夹中,创建一个名为 的文件夹。Editor

“编辑器”文件夹中,创建一个名为的 C# 脚本,并将其内容替换为以下内容:SimpleBindingPropertyTrackingExample.cs

using UnityEditor;
using UnityEngine;
using UnityEditor.UIElements;
using UnityEngine.UIElements;

namespace UIToolkitExamples
{
    public class SimpleBindingPropertyTrackingExample : EditorWindow
    {
        TextField m_ObjectNameBinding;

        [MenuItem("Window/UIToolkitExamples/Simple Binding Property Tracking Example")]
        public static void ShowDefaultWindow()
        {
            var wnd = GetWindow<SimpleBindingPropertyTrackingExample>();
            wnd.titleContent = new GUIContent("Simple Binding Property Tracking");
        }
            
        public void CreateGUI()
        {
            m_ObjectNameBinding = new TextField("Object Name Binding");
            rootVisualElement.Add(m_ObjectNameBinding);
            OnSelectionChange();
        }

        public void OnSelectionChange()
        {
            GameObject selectedObject = Selection.activeObject as GameObject;
            if (selectedObject != null)
            {
                // Create the SerializedObject from the current selection
                SerializedObject so = new SerializedObject(selectedObject);

                // Note: the "name" property of a GameObject is actually named "m_Name" in serialization.
                SerializedProperty property = so.FindProperty("m_Name");
                    
                // Ensure to use Unbind() before tracking a new property
                m_ObjectNameBinding.Unbind();
                m_ObjectNameBinding.TrackPropertyValue(property, CheckName);

                // Bind the property to the field directly
                m_ObjectNameBinding.BindProperty(property);

                CheckName(property);
            }
            else
            {
                // Unbind any binding from the field
                m_ObjectNameBinding.Unbind();
            }
        }

        void CheckName(SerializedProperty property)
        {
            if (property.stringValue == "GameObject")
            {
                m_ObjectNameBinding.style.backgroundColor = Color.red * 0.5f;
            }
            else
            {
                m_ObjectNameBinding.style.backgroundColor = StyleKeyword.Null;
            }
        }
    }
}

测试绑定

  1. 在 Unity 中,选择“窗口> UIToolkit示例”>“简单绑定属性跟踪示例”。此时将显示一个带有文本字段的自定义编辑器窗口。
  2. 选择场景中的任意游戏对象。游戏对象的名称将显示在编辑器窗口的文本字段中。
  3. 更改文本字段中游戏对象的名称。如果名称为 ,则标签的背景色将变为深红色。GameObject

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :绑定到 UXML 模板 (mvrlink.com)

下一篇:Unity3D :在任何绑定属性更改时接收回调 (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号