12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
- [System.Serializable]
- public class SceneField
- {
- public Object SceneAsset { get { return m_SceneAsset; } }
- [SerializeField]
- private Object m_SceneAsset = null;
- [SerializeField]
- private string m_SceneName = "";
- public string SceneName
- {
- get { return m_SceneName; }
- }
- // makes it work with the existing Unity methods (LoadLevel/LoadScene)
- public static implicit operator string( SceneField sceneField )
- {
- return sceneField.SceneName;
- }
- }
- #if UNITY_EDITOR
- [CustomPropertyDrawer(typeof(SceneField))]
- public class SceneFieldPropertyDrawer : PropertyDrawer
- {
- public override void OnGUI(Rect _position, SerializedProperty _property, GUIContent _label)
- {
- EditorGUI.BeginProperty(_position, GUIContent.none, _property);
- SerializedProperty sceneAsset = _property.FindPropertyRelative("m_SceneAsset");
- SerializedProperty sceneName = _property.FindPropertyRelative("m_SceneName");
- _position = EditorGUI.PrefixLabel(_position, GUIUtility.GetControlID(FocusType.Passive), _label);
- if (sceneAsset != null)
- {
- sceneAsset.objectReferenceValue = EditorGUI.ObjectField(_position, sceneAsset.objectReferenceValue, typeof(SceneAsset), false);
- if( sceneAsset.objectReferenceValue != null )
- {
- sceneName.stringValue = (sceneAsset.objectReferenceValue as SceneAsset).name;
- }
- }
- EditorGUI.EndProperty( );
- }
- }
- #endif
|