Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEditor;
- using UnityEngine;
- [CustomPropertyDrawer(typeof(SceneAttribute))]
- public class SceneDrawer : PropertyDrawer
- {
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- if (property.propertyType == SerializedPropertyType.String)
- {
- var sceneObject = GetSceneObject(property.stringValue);
- var scene = EditorGUI.ObjectField(position, label, sceneObject, typeof(SceneAsset), true);
- if (scene == null)
- {
- property.stringValue = "";
- }
- else if (scene.name != property.stringValue)
- {
- var sceneObj = GetSceneObject(scene.name);
- if (sceneObj == null)
- {
- Debug.LogWarning("The scene " + scene.name + " cannot be used. To use this scene add it to the build settings for the project");
- }
- else
- {
- property.stringValue = scene.name;
- }
- }
- }
- else
- EditorGUI.LabelField(position, label.text, "Use [Scene] with strings.");
- }
- protected SceneAsset GetSceneObject(string sceneObjectName)
- {
- if (string.IsNullOrEmpty(sceneObjectName))
- {
- return null;
- }
- foreach (var editorScene in EditorBuildSettings.scenes)
- {
- if (editorScene.path.IndexOf(sceneObjectName) != -1)
- {
- return AssetDatabase.LoadAssetAtPath(editorScene.path, typeof(SceneAsset)) as SceneAsset;
- }
- }
- Debug.LogWarning("Scene [" + sceneObjectName + "] cannot be used. Add this scene to the 'Scenes in the Build' in build settings.");
- return null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement