Jump to content
Unity Insider Forum

Editor


Kojote

Recommended Posts

Hallo!

Ich habe ein kleines Problem mit einem selbst geschriebenen Editor.

Mein derzeitiger Stand: Ich habe ein Script, in dem ich eine String Liste erzeuge, diese String Liste möchte ich in ein Enum verwandeln. In mehreren Scripts soll dieses aktualisierte Enum funktionieren, es soll ein Auswahlfeld sein, welches man im Editor ändern kann.

Da dies mit dem normalen Enum nicht geht, hab ich mir dieses Script zusammen gebastelt:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

namespace EMM {
    [CustomEditor(typeof(EMM_Minimap_Icon))]
    public class EMM_Enum_Generator_Editor : Editor {
        public string[] minimapTypeChoices = new[] { "NoTypeAvailable", "Test1", "Test2" };

        int choiceIndex = 0;

        public override void OnInspectorGUI() {
            // Draw the default inspector
            DrawDefaultInspector();
            choiceIndex = EditorGUILayout.Popup(choiceIndex, minimapTypeChoices);
            var minimapIcon = target as EMM_Minimap_Icon;
            // Update the selected choice in the underlying object
            minimapIcon.minimapTypeChoice = choiceIndex;
            // Save the changes back to the object
            EditorUtility.SetDirty(target);
        }
    }
}

Des weiteren dieses Script:

namespace EMM {
    public class EMM_Minimap_Icon : MonoBehaviour {
        public int minimapTypeChoice;
    }
}

Problem ist nun folgendes. Das Script EMM_Minimap_Icon existiert mehrmals. Wenn ich nun mein eigenes Enum ändere wird dies zwar erkannt, wechsel ich aber auf ein anderes Game Objekt mit diesem Script und zurück hat er den Integer "minimapTypChoice" wieder vergessen.

Habt ihre eine Idee was falsch läuft?

Grüße von Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich richtig verstanden habe, dass mehrere Scripte gleichzeitig minimapTypeChoice und gleichen Wert haben sollen, dann kannst du static variable benutzen. Weil du sagtest ja, dass es vergessen wird. Bei static sollte das nicht passieren

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da du das Enum nicht zur Laufzeit generieren willst, kannst du einfach die Datei für das Enum selbst generieren. Hier sieht man zwei Beispiele: https://answers.unity.com/questions/1170350/editorscript-generate-enum-from-string.html

Zudem wirst du ja warscheinlich wissen, wann dieses Enum generiert werden soll. Eventuell kann es also hilfreich sein darauf zu achten, wann Assets geändert wurden: https://docs.unity3d.com/ScriptReference/AssetModificationProcessor.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...