From 30fc548aa5f727bc3e27ea589f61eed501357aed Mon Sep 17 00:00:00 2001 From: Xytabich Date: Sun, 26 Sep 2021 07:37:10 +0300 Subject: [PATCH] menu "convert scene" --- .../Editor Scripts/Udon/BehavioursTracker.cs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Assets/Katsudon/Editor Scripts/Udon/BehavioursTracker.cs b/Assets/Katsudon/Editor Scripts/Udon/BehavioursTracker.cs index cdc2acc..196fb97 100644 --- a/Assets/Katsudon/Editor Scripts/Udon/BehavioursTracker.cs +++ b/Assets/Katsudon/Editor Scripts/Udon/BehavioursTracker.cs @@ -93,6 +93,41 @@ private static void Init() UpdateReferencesContainer(); } + [MenuItem("Katsudon/Convert Scene")] + private static void ConvertAllToUdon() + { + if(EditorApplication.isPlaying) return; + var behaviours = GameObject.FindObjectsOfType(); + var group = Undo.GetCurrentGroup(); + var initBehaviours = CollectionCache.GetList(); + var initProxies = CollectionCache.GetList(); + foreach(var proxy in behaviours) + { + if((proxy.hideFlags & HideFlags.DontSave) != 0) continue; + if(Utils.IsUdonAsm(proxy.GetType())) + { + var behaviour = GetBehaviourByProxy(proxy); + if(behaviour == null) + { + proxy.enabled = false; + proxy.hideFlags = SERVICE_OBJECT_FLAGS; + + behaviour = proxy.gameObject.AddComponent(); + RegisterPair(behaviour, proxy); + initBehaviours.Add(behaviour); + initProxies.Add(behaviour); + } + } + } + for(int i = 0; i < initBehaviours.Count; i++) + { + ProxyUtils.InitBehaviour(initBehaviours[i], initProxies[i]); + } + CollectionCache.Release(initBehaviours); + CollectionCache.Release(initProxies); + Undo.CollapseUndoOperations(group); + } + private static void OnPlayModeChanged(PlayModeStateChange state) { if(state == PlayModeStateChange.EnteredPlayMode || state == PlayModeStateChange.EnteredEditMode)