Jump to content
Unity Insider Forum
Sign in to follow this  
Kojote

Editor

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×