forked from cgvr/DeltaVR
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#if UNITY_EDITOR
 | 
						|
using FishNet.Editing.PrefabCollectionGenerator;
 | 
						|
using FishNet.Object;
 | 
						|
using FishNet.Utility.Extension;
 | 
						|
using FishNet.Utility.Performance;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEditor;
 | 
						|
using UnityEngine;
 | 
						|
using UnityEngine.SceneManagement;
 | 
						|
 | 
						|
namespace FishNet.Editing
 | 
						|
{
 | 
						|
    public class ConfigurationEditor : EditorWindow
 | 
						|
    {
 | 
						|
 | 
						|
        [MenuItem("Fish-Networking/Configuration", false, 0)]
 | 
						|
        public static void ShowConfiguration()
 | 
						|
        {
 | 
						|
            SettingsService.OpenProjectSettings("Project/Fish-Networking/Configuration");
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    public class RebuildSceneIdMenu : MonoBehaviour
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Rebuilds sceneIds for open scenes.
 | 
						|
        /// </summary>
 | 
						|
        [MenuItem("Fish-Networking/Rebuild SceneIds", false, 20)]
 | 
						|
        public static void RebuildSceneIds()
 | 
						|
        {
 | 
						|
            int generatedCount = 0;
 | 
						|
            for (int i = 0; i < SceneManager.sceneCount; i++)
 | 
						|
            {
 | 
						|
                Scene s = SceneManager.GetSceneAt(i);
 | 
						|
 | 
						|
                ListCache<NetworkObject> nobs;
 | 
						|
                SceneFN.GetSceneNetworkObjects(s, false, out nobs);
 | 
						|
                for (int z = 0; z < nobs.Written; z++)
 | 
						|
                {
 | 
						|
                    NetworkObject nob = nobs.Collection[z];
 | 
						|
                    nob.TryCreateSceneID();
 | 
						|
                    EditorUtility.SetDirty(nob);
 | 
						|
                }
 | 
						|
                generatedCount += nobs.Written;
 | 
						|
 | 
						|
                ListCaches.StoreCache(nobs);
 | 
						|
            }
 | 
						|
 | 
						|
            Debug.Log($"Generated sceneIds for {generatedCount} objects over {SceneManager.sceneCount} scenes. Please save your open scenes.");
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    public class RefreshDefaultPrefabsMenu : MonoBehaviour
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Rebuilds the DefaultPrefabsCollection file.
 | 
						|
        /// </summary>
 | 
						|
        [MenuItem("Fish-Networking/Refresh Default Prefabs", false, 22)]
 | 
						|
        public static void RebuildDefaultPrefabs()
 | 
						|
        {
 | 
						|
            Debug.Log("Refreshing default prefabs.");
 | 
						|
            Generator.GenerateFull(null, true);
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public class RemoveDuplicateNetworkObjectsMenu : MonoBehaviour
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Iterates all network object prefabs in the project and open scenes, removing NetworkObject components which exist multiple times on a single object.
 | 
						|
        /// </summary>
 | 
						|
        [MenuItem("Fish-Networking/Remove Duplicate NetworkObjects", false, 21)]
 | 
						|
 | 
						|
        public static void RemoveDuplicateNetworkObjects()
 | 
						|
        {
 | 
						|
            List<NetworkObject> foundNobs = new List<NetworkObject>();
 | 
						|
 | 
						|
            foreach (string path in Generator.GetPrefabFiles("Assets", new HashSet<string>(), true))
 | 
						|
            {
 | 
						|
                NetworkObject nob = AssetDatabase.LoadAssetAtPath<NetworkObject>(path);
 | 
						|
                if (nob != null)
 | 
						|
                    foundNobs.Add(nob);
 | 
						|
            }
 | 
						|
 | 
						|
            //Now add scene objects.
 | 
						|
            for (int i = 0; i < SceneManager.sceneCount; i++)
 | 
						|
            {
 | 
						|
                Scene s = SceneManager.GetSceneAt(i);
 | 
						|
 | 
						|
                ListCache<NetworkObject> nobs;
 | 
						|
                SceneFN.GetSceneNetworkObjects(s, false, out nobs);
 | 
						|
                for (int z = 0; z < nobs.Written; z++)
 | 
						|
                {
 | 
						|
                    NetworkObject nob = nobs.Collection[z];
 | 
						|
                    nob.TryCreateSceneID();
 | 
						|
                    EditorUtility.SetDirty(nob);
 | 
						|
                }
 | 
						|
                for (int z = 0; z < nobs.Written; z++)
 | 
						|
                    foundNobs.Add(nobs.Collection[i]);
 | 
						|
 | 
						|
                ListCaches.StoreCache(nobs);
 | 
						|
            }
 | 
						|
 | 
						|
            //Remove duplicates.
 | 
						|
            int removed = 0;
 | 
						|
            foreach (NetworkObject nob in foundNobs)
 | 
						|
            {
 | 
						|
                int count = nob.RemoveDuplicateNetworkObjects();
 | 
						|
                if (count > 0)
 | 
						|
                    removed += count;
 | 
						|
            }
 | 
						|
 | 
						|
            Debug.Log($"Removed {removed} duplicate NetworkObjects. Please save your open scenes and project.");
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
#endif |