22using System ;
33using System . Collections . Generic ;
44using System . Linq ;
5+ using System . Text ;
6+ using UnityEditor ;
57using UnityEditor . SceneManagement ;
68using UnityEngine ;
79using UnityEngine . SceneManagement ;
@@ -21,6 +23,28 @@ internal class NetworkObjectRefreshTool
2123
2224 internal static Action AllScenesProcessed ;
2325
26+ internal static NetworkObject PrefabNetworkObject ;
27+
28+ internal static void LogInfo ( string msg , bool append = false )
29+ {
30+ if ( ! append )
31+ {
32+ s_Log . AppendLine ( msg ) ;
33+ }
34+ else
35+ {
36+ s_Log . Append ( msg ) ;
37+ }
38+ }
39+
40+ internal static void FlushLog ( )
41+ {
42+ Debug . Log ( s_Log . ToString ( ) ) ;
43+ s_Log . Clear ( ) ;
44+ }
45+
46+ private static StringBuilder s_Log = new StringBuilder ( ) ;
47+
2448 internal static void ProcessScene ( string scenePath , bool processScenes = true )
2549 {
2650 if ( ! s_ScenesToUpdate . Contains ( scenePath ) )
@@ -29,14 +53,18 @@ internal static void ProcessScene(string scenePath, bool processScenes = true)
2953 {
3054 EditorSceneManager . sceneOpened += EditorSceneManager_sceneOpened ;
3155 EditorSceneManager . sceneSaved += EditorSceneManager_sceneSaved ;
56+ s_Log . Clear ( ) ;
57+ LogInfo ( "NetworkObject Refresh Scenes to Process:" ) ;
3258 }
59+ LogInfo ( $ "[{ scenePath } ]", true ) ;
3360 s_ScenesToUpdate . Add ( scenePath ) ;
3461 }
3562 s_ProcessScenes = processScenes ;
3663 }
3764
3865 internal static void ProcessActiveScene ( )
3966 {
67+ FlushLog ( ) ;
4068 var activeScene = SceneManager . GetActiveScene ( ) ;
4169 if ( s_ScenesToUpdate . Contains ( activeScene . path ) && s_ProcessScenes )
4270 {
@@ -54,10 +82,12 @@ internal static void ProcessScenes()
5482 }
5583 else
5684 {
85+ s_ProcessScenes = false ;
5786 s_CloseScenes = false ;
5887 EditorSceneManager . sceneSaved -= EditorSceneManager_sceneSaved ;
5988 EditorSceneManager . sceneOpened -= EditorSceneManager_sceneOpened ;
6089 AllScenesProcessed ? . Invoke ( ) ;
90+ FlushLog ( ) ;
6191 }
6292 }
6393
@@ -68,9 +98,8 @@ private static void FinishedProcessingScene(Scene scene, bool refreshed = false)
6898 // Provide a log of all scenes that were modified to the user
6999 if ( refreshed )
70100 {
71- Debug . Log ( $ "Refreshed and saved updates to scene: { scene . name } ") ;
101+ LogInfo ( $ "Refreshed and saved updates to scene: { scene . name } ") ;
72102 }
73- s_ProcessScenes = false ;
74103 s_ScenesToUpdate . Remove ( scene . path ) ;
75104
76105 if ( scene != SceneManager . GetActiveScene ( ) )
@@ -88,24 +117,41 @@ private static void EditorSceneManager_sceneSaved(Scene scene)
88117
89118 private static void SceneOpened ( Scene scene )
90119 {
120+ LogInfo ( $ "Processing scene { scene . name } :") ;
91121 if ( s_ScenesToUpdate . Contains ( scene . path ) )
92122 {
93123 if ( s_ProcessScenes )
94124 {
95- if ( ! EditorSceneManager . MarkSceneDirty ( scene ) )
96- {
97- Debug . Log ( $ "Scene { scene . name } did not get marked as dirty!") ;
98- FinishedProcessingScene ( scene ) ;
99- }
100- else
125+ var prefabInstances = PrefabUtility . FindAllInstancesOfPrefab ( PrefabNetworkObject . gameObject ) ;
126+
127+ if ( prefabInstances . Length > 0 )
101128 {
102- EditorSceneManager . SaveScene ( scene ) ;
129+ var instancesSceneLoadedSpecific = prefabInstances . Where ( ( c ) => c . scene == scene ) . ToList ( ) ;
130+
131+ if ( instancesSceneLoadedSpecific . Count > 0 )
132+ {
133+ foreach ( var prefabInstance in instancesSceneLoadedSpecific )
134+ {
135+ prefabInstance . GetComponent < NetworkObject > ( ) . OnValidate ( ) ;
136+ }
137+
138+ if ( ! EditorSceneManager . MarkSceneDirty ( scene ) )
139+ {
140+ LogInfo ( $ "Scene { scene . name } did not get marked as dirty!") ;
141+ FinishedProcessingScene ( scene ) ;
142+ }
143+ else
144+ {
145+ LogInfo ( $ "Changes detected and applied!") ;
146+ EditorSceneManager . SaveScene ( scene ) ;
147+ }
148+ return ;
149+ }
103150 }
104151 }
105- else
106- {
107- FinishedProcessingScene ( scene ) ;
108- }
152+
153+ LogInfo ( $ "No changes required.") ;
154+ FinishedProcessingScene ( scene ) ;
109155 }
110156 }
111157
0 commit comments