| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | using UnityEngine;#if UNITY_EDITORusing 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
 |