Unity编辑器代码中如何分配ScriptableObject实例
在自定义节点图编辑器中访问ScriptableObject数据的实现方案
1. 创建包含Color字段的ScriptableObject
创建继承自ScriptableObject的类,添加CreateAssetMenu特性方便快速生成实例:
using UnityEngine; [CreateAssetMenu(fileName = "ColorData", menuName = "ScriptableObjects/ColorData")] public class ColorDataSO : ScriptableObject { public Color targetColor; }
2. 创建SO实例并设置颜色
在Project窗口右键,选择Create > ScriptableObjects > ColorData生成SO实例,选中实例后在Inspector面板中设置targetColor的颜色值。
3. 编辑器脚本中获取SO实例
根据编辑器脚本的类型,有两种常见实现方式:
场景一:自定义EditorWindow中获取
在EditorWindow类中声明[SerializeField]字段,同时在窗口GUI中添加拖拽选择区域:
using UnityEditor; using UnityEngine; public class NodeGraphEditorWindow : EditorWindow { [SerializeField] private ColorDataSO colorData; [MenuItem("Window/Node Graph Editor")] public static void OpenWindow() { GetWindow<NodeGraphEditorWindow>("Node Graph Editor"); } private void OnGUI() { // 显示SO选择框,支持拖拽赋值 colorData = (ColorDataSO)EditorGUILayout.ObjectField("Color Data", colorData, typeof(ColorDataSO), false); } }
场景二:自定义Editor(针对MonoBehavior)中获取
先在目标MonoBehavior中添加SO的序列化字段,再在编辑器脚本中通过target或SerializedProperty获取:
目标MonoBehavior代码:
public class NodeGraphManager : MonoBehaviour { [SerializeField] private ColorDataSO colorData; }
编辑器脚本代码:
using UnityEditor; using UnityEngine; [CustomEditor(typeof(NodeGraphManager))] public class NodeGraphManagerEditor : Editor { private SerializedProperty colorDataProp; private void OnEnable() { colorDataProp = serializedObject.FindProperty("colorData"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(colorDataProp); serializedObject.ApplyModifiedProperties(); // 获取SO实例 var graphManager = (NodeGraphManager)target; ColorDataSO colorData = graphManager.colorData; } }
4. 使用SO实例中的颜色
拿到SO实例后,直接调用其targetColor字段即可用于节点绘制等操作:
// 示例:在EditorWindow中绘制带SO颜色的节点 if (colorData != null) { // 绘制彩色节点矩形 EditorGUI.DrawRect(new Rect(50, 50, 120, 60), colorData.targetColor); // 在矩形上绘制文字 EditorGUI.LabelField(new Rect(50, 50, 120, 60), "Custom Node", EditorStyles.whiteLabel); }
内容的提问来源于stack exchange,提问作者IndividualGames
相关产品推荐
相关产品推荐

