MustafGames Geschrieben 21. August 2017 Melden Share Geschrieben 21. August 2017 Hallo liebe Community, zur Zeit nutze ich viel UnityEvent in meinem Inspector, sowie auch hier: [System.Serializable] public class UI_Function { [HideInInspector] public string elementid; public enum Methode { Permanent, OnClick, OnSelect, OnHover, OnKey }; public Methode methode; public UnityEvent scripts; } Alles klappt bis auf das wenn ich im Inspector dem UnityEvent ein Event zuweisen möchte dann kommt der Fehler "Object reference not set to an instance of an object". Wenn ich nun folgendes ändere -> "public class UI_Function : UnityEvent" , geht es nur dann sehe ich die Variable "methode" nicht mehr im Inspector, weiß jemand wie ich dieses Problem lösen kann? Mfg Mustaf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 21. August 2017 Melden Share Geschrieben 21. August 2017 Ich kenne das Konstrukt noch nicht, aber in der Doku leiten sie von "System.Object" ab ... Vielleicht fehlt das hier?https://docs.unity3d.com/ScriptReference/Serializable.html Der Sinn ist denke ich, daß du diese Klasse dann als Member einer anderen MonoBehaviour-Klasse verwenden kannst und im Inspektor "Sub-Attribute" angezeigt werden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 22. August 2017 Autor Melden Share Geschrieben 22. August 2017 Klappt leider nicht, ich hab jetzt schon alles mögliche probiert. Nur das mit dem "public class UI_Function : UnityEvent" funktioniert jedoch zeigt es mir dann die anderen Variablen nicht an.. NullReferenceException: Object reference not set to an instance of an object UnityEditorInternal.UnityEventDrawer.AddEventListener (UnityEditorInternal.ReorderableList list) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:359) UnityEditorInternal.ReorderableList+Defaults.DrawFooter (Rect rect, UnityEditorInternal.ReorderableList list) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:105) UnityEditorInternal.ReorderableList.DoListFooter (Rect footerRect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:627) UnityEditorInternal.ReorderableList.DoList (Rect rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:402) UnityEditorInternal.UnityEventDrawer.OnGUI (Rect position) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:146) UnityEditorInternal.UnityEventDrawer.OnGUI (Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label) (at C:/buildslave/unity/build/Editor/Mono/Inspector/UnityEventDrawer.cs:115) UnityEditor.PropertyDrawer.OnGUISafe (Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label) (at C:/buildslave/unity/build/Editor/Mono/ScriptAttributeGUI/PropertyDrawer.cs:22) UnityEditor.PropertyHandler.OnGUI (Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label, Boolean includeChildren) (at C:/buildslave/unity/build/Editor/Mono/ScriptAttributeGUI/PropertyHandler.cs:142) UnityEditor.EditorGUI.PropertyFieldInternal (Rect position, UnityEditor.SerializedProperty property, UnityEngine.GUIContent label, Boolean includeChildren) (at C:/buildslave/unity/build/Editor/Mono/EditorGUI.cs:5213) UnityEditor.EditorGUI.PropertyField (Rect position, UnityEditor.SerializedProperty property, Boolean includeChildren) (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorGUIBindings.gen.cs:1034) UnityEditor.EditorGUI.PropertyField (Rect position, UnityEditor.SerializedProperty property) (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorGUIBindings.gen.cs:1029) UnityEditor.Editor.OptimizedInspectorGUIImplementation (Rect contentRect) (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:273) UnityEditor.GenericInspector.OnOptimizedInspectorGUI (Rect contentRect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/GenericInspector.cs:32) UnityEditor.InspectorWindow.DrawEditor (UnityEditor.Editor editor, Int32 editorIndex, Boolean rebuildOptimizedGUIBlock, System.Boolean& showImportedObjectBarNext, UnityEngine.Rect& importedObjectBarRect) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1209) UnityEditor.InspectorWindow.DrawEditors (UnityEditor.Editor[] editors) (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:1019) UnityEditor.InspectorWindow.OnGUI () (at C:/buildslave/unity/build/Editor/Mono/Inspector/InspectorWindow.cs:358) System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 22. August 2017 Melden Share Geschrieben 22. August 2017 Kannst du noch eine Beispielklasse posten in der du die andere einbettest? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 22. August 2017 Autor Melden Share Geschrieben 22. August 2017 [System.Serializable] public class UI_Element { [HideInInspector] public string menuid; public string id; public GameObject element; public bool activated = true; public List<UI_Function> functions = new List<UI_Function>(); } Das ist die übergeordnete Klasse. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. August 2017 Melden Share Geschrieben 23. August 2017 Ich meine, mich zu erinnern, dass Unity ein Limit bei der Serialisierungstiefe hat. Wenn du also ein Objekt in einem Objekt in einem Objekt serialisieren willst, kann das eventuell schon schiefgehen. Aber mal ehrlich: Wer will den auch einen 200 Zeilen großen Inspektor haben, wenn ein bisschen was ausgeklappt ist? In jedem Fall kannst du ScriptableObjects benutzen, um Teile davon aus dieser Objekt-in-Objekt-Kette rauszuholen. Du solltest überlegen, ob diese ScriptableObjects nicht außerhalb deines Hauptobjekts gut aufgehoben sind, sodass sie einzeln bearbeitet werden können. Oder anders gesagt: Dass man sie in den Assets raussuchen kann, anstatt sie in einer riesigen Liste zu finden. Alternativ kannst du die ScriptableObjects auch unsichtbar irgendwo unterordnen, aber die andere Variante ist einfacher. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 23. August 2017 Autor Melden Share Geschrieben 23. August 2017 Wie funktionieren den die ScriptableObjects, sind das dann so gesagt wie Custom Inspectors? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 25. August 2017 Melden Share Geschrieben 25. August 2017 Nein. ScriptableObjects sind Objekte, die Unity vernünftig serialisieren kann. Sie können z.B. in den Assets gespeichert werden und haben somit keinen erzwungenen Bezug zu irgendeiner Szene. Ein gutes Beispiel für einen Anwendungszweck von SOs sind z.B. Inventar-Items. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MustafGames Geschrieben 30. August 2017 Autor Melden Share Geschrieben 30. August 2017 Entschuldigung das ich erst jetzt antworte. In diesen Fall wäre das aber eher unpraktisch da ich einfach nur meine UI-Elemente da einordne also Buttons etc. und per einen Main Script dann die Funktionen starte die man dort nur einstellt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.