SceneAsset 用于在编辑器中引用场景对象。
该类可用作 ObjectField UI 元素的类型,以允许用户选择场景对象作为字段的值。
此示例显示如何在编辑器中选择场景。ScenePicker 组件放置在场景中的游戏对象上:
using UnityEngine;
public class ScenePicker : MonoBehaviour { [SerializeField] public string scenePath; }
ScenePickerEditor 脚本必须位于项目的 Editor 目录中。它在编辑器中提供自定义检视面板,该检视面板使用 ObjectField 中的 SceneAsset 类来允许用户选取场景。
using UnityEngine; using UnityEditor;
[CustomEditor(typeof(ScenePicker), true)] public class ScenePickerEditor : Editor { public override void OnInspectorGUI() { var picker = target as ScenePicker; var oldScene = AssetDatabase.LoadAssetAtPath<SceneAsset>(picker.scenePath);
serializedObject.Update();
EditorGUI.BeginChangeCheck(); var newScene = EditorGUILayout.ObjectField("scene", oldScene, typeof(SceneAsset), false) as SceneAsset;
if (EditorGUI.EndChangeCheck()) { var newPath = AssetDatabase.GetAssetPath(newScene); var scenePathProperty = serializedObject.FindProperty("scenePath"); scenePathProperty.stringValue = newPath; } serializedObject.ApplyModifiedProperties(); } }