Jump to content
Unity Insider Forum

UnityEvent Fehler


MustafGames

Recommended Posts

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

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

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

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...