| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 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.IsNullOrWhiteSpace(property.stringValue))                {                    // try to load it from the build settings for legacy compatibility                    sceneObject = GetBuildSettingsSceneObject(property.stringValue);                }                if (sceneObject == null && !string.IsNullOrWhiteSpace(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;        }    }}
 |