MaZy Geschrieben 25. August 2019 Melden Share Geschrieben 25. August 2019 Hallo, ich habe einen Script welches im Editor automatisch läuft. Der überwacht, ob sich in der Hierarchy was geändert hat. Wenn ja sucht es nach bestimmten Components und setzt dann die Werte (einfach jeden eine bestimmte Zahl zuweisen). Doch sobald man von ein anderen Scenen in die Scene in Playmode wechselst sind die Werte plötzlich wieder zurück gesetzt zu den Wert, den ich per Hand eingegeben habe ODER es nimmt den Standardwert von Prefab oder so. Ich vermute mal, dass mir irgendwas wie speichern fehl, aber finde dazu kaum was. Es hat was zwar mit Editor zu tun, aber erbt den Editor Script nicht. Auch was mir eingefallen ist, dass normaleweise ja wenn man in der Scene im Inspector vom Prefab Werte ändert, dass es in Fettschrift angezeigt wird. Das passiert beim Script auch nicht. using Maz.Network.UnityEngine; using System.Linq; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; [InitializeOnLoad] public static class NetworkSceneObjectEditor { static NetworkSceneObjectEditor() { if(!EditorApplication.isPlaying) EditorApplication.hierarchyChanged += OnHierarchyChanged; } static void OnHierarchyChanged() { if (EditorApplication.isPlaying) return; var all = Resources.FindObjectsOfTypeAll<NetworkSceneObject>(); var networkSceneObjects = all.Where(obj => (obj.hideFlags & HideFlags.HideInHierarchy) != HideFlags.HideInHierarchy); //Debug.LogFormat("There are currently {0} GameObjects visible in the hierarchy.", networkSceneObjects.Count()); int i = 0; foreach (var o in networkSceneObjects) { var netObject = o.GetComponent<NetworkObject>(); if (netObject == null) { Debug.Log("NetworkObject is missing! NetworkSceneObject will not work"); continue; } o.scenenNetId = i; netObject.NetId = i; //EditorUtility.SetDirty(o); //EditorUtility.SetDirty(netObject); //EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); i++; } Debug.Log($"Hiearchy changed"); } } Hab paar Dinge versucht mit speichern der Scene oder SetDirty, aber da merke ich, dass dann dieser Event gespamt wird. Hab keine weiteren Ideen mehr. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MaZy Geschrieben 25. August 2019 Autor Melden Share Geschrieben 25. August 2019 Ok hat lange gedauert, aber man muss mit serializeObject arbeiten. Man muss also in meinem fall das hier machen SerializedObject scenenObjectSO = new SerializedObject(scenenObjects); var scenenNetId = scenenObjectSO.FindProperty("scenenNetId"); scenenNetId.intValue = i; scenenObjectSO.ApplyModifiedProperties(); SerializedObject netObjectSO = new SerializedObject(netObject); var netIdProp = netObjectSO.FindProperty("netId"); netIdProp.intValue = i; netObjectSO.ApplyModifiedProperties(); 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.