mirror of
				https://github.com/DerTyp7/defrain-shooter-unity.git
				synced 2025-10-31 21:47:07 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEditor;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace Mirror
 | |
| {
 | |
|     [CustomPropertyDrawer(typeof(SceneAttribute))]
 | |
|     public class SceneDrawer : PropertyDrawer
 | |
|     {
 | |
|         public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
 | |
|         {
 | |
|             if (property.propertyType == SerializedPropertyType.String)
 | |
|             {
 | |
|                 SceneAsset sceneObject = AssetDatabase.LoadAssetAtPath<SceneAsset>(property.stringValue);
 | |
| 
 | |
|                 if (sceneObject == null && !string.IsNullOrEmpty(property.stringValue))
 | |
|                 {
 | |
|                     // try to load it from the build settings for legacy compatibility
 | |
|                     sceneObject = GetBuildSettingsSceneObject(property.stringValue);
 | |
|                 }
 | |
|                 if (sceneObject == null && !string.IsNullOrEmpty(property.stringValue))
 | |
|                 {
 | |
|                     Debug.LogError($"Could not find scene {property.stringValue} in {property.propertyPath}, assign the proper scenes in your NetworkManager");
 | |
|                 }
 | |
|                 SceneAsset scene = (SceneAsset)EditorGUI.ObjectField(position, label, sceneObject, typeof(SceneAsset), true);
 | |
| 
 | |
|                 property.stringValue = AssetDatabase.GetAssetPath(scene);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 EditorGUI.LabelField(position, label.text, "Use [Scene] with strings.");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected SceneAsset GetBuildSettingsSceneObject(string sceneName)
 | |
|         {
 | |
|             foreach (EditorBuildSettingsScene buildScene in EditorBuildSettings.scenes)
 | |
|             {
 | |
|                 SceneAsset sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(buildScene.path);
 | |
|                 if (sceneAsset!= null && sceneAsset.name == sceneName)
 | |
|                 {
 | |
|                     return sceneAsset;
 | |
|                 }
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| }
 | 
