C# Unity:ScriptableObjects的CustomDrawers?
我正在尝试为一个简单的方面创建一个自定义抽屉:ScriptableObject。只要Aspect类是泛型类,我就可以让它的一切正常工作,但一旦它是ScriptableObject,一切都会中断。具体而言:C# Unity:ScriptableObjects的CustomDrawers?,c#,user-interface,unity3d,C#,User Interface,Unity3d,我正在尝试为一个简单的方面创建一个自定义抽屉:ScriptableObject。只要Aspect类是泛型类,我就可以让它的一切正常工作,但一旦它是ScriptableObject,一切都会中断。具体而言: EditorGUI.PropertyField(position, property.FindPropertyRelative("AspectName"), new GUIContent("Aspect:")); 但是findPropRel是空
EditorGUI.PropertyField(position, property.FindPropertyRelative("AspectName"),
new GUIContent("Aspect:"));
但是findPropRel是空的。使用property.serializedObject返回特性所在的父对象,而不是特性。因为我不知道它是哪个方面,所以我甚至不能用它来拼凑一个解决方案
没有办法为scriptableObjects或MonoBehavior创建customDrawer吗?我无法想象Unity会让CustomDrawers无法与最常见的Unity类一起使用
不,customEditor在这种情况下真的不起作用。我必须为完全不相关的类制作几十个图形,才能绘制外观。我也有同样的问题。我已经掌握了一种技巧,可以从ScriptableObject获取属性,但不使用FindPropertyRelative,它不适用于ScriptableObject,但适用于普通对象 如果您计划在另一个monobhavior类中实例化该类,那么使用monobhavior也将不起作用,因为monobhavior类只能作为组件添加到游戏对象中。您不能使用new创建它,否则Unity会抱怨 我必须告诉你,但是我不认为我的解决方案真的有效,因为我不确定它在预制件上是否有效,但这可能是因为我试图在预制件上保存一些场景引用,而这似乎无法在统一中完成 嗯。停止讲话。我就是这么做的: 假设要访问的脚本对象属于MySOClass类
public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) {
// Make a new serialized object for your property that is a class that inherits
// from ScriptableObject
SerializedObject serializedObject = new SerializedObject(prop.objectReferenceValue as MySOClass);
SerializedProperty propSP = serializedObject.FindProperty("prop");
if (propSP != null) {
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(propSP , true);
if (EditorGUI.EndChangeCheck()) {
serializedObject.ApplyModifiedProperties();
}
}
}
我之所以测试propSP的空值,是因为如果prop的实际值为空,则返回的序列化属性也将为空。谢谢,这正是我要找的。我将尝试使用此设计,如果遇到任何问题,我将返回。不确定此设计何时中断,但对于ScriptableObjects,
prop.objectReferenceValue
始终返回null
。