Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity:ScriptableObjects的CustomDrawers?_C#_User Interface_Unity3d - Fatal编程技术网

C# Unity:ScriptableObjects的CustomDrawers?

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是空

我正在尝试为一个简单的方面创建一个自定义抽屉:ScriptableObject。只要Aspect类是泛型类,我就可以让它的一切正常工作,但一旦它是ScriptableObject,一切都会中断。具体而言:

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