Unity3d 如何在Unity inspector中绘制场景对象

Unity3d 如何在Unity inspector中绘制场景对象,unity3d,serialization,scene,inspector,Unity3d,Serialization,Scene,Inspector,我需要在检查器中使用场景对象(从新的场景管理器)进行查看和操作。 即使我尝试使用 [SerializeField] Scene scene; 这个场景仍然没有在《检查员》中出现。 由于SceneManager是相当新的(Unity 5),因此没有太多信息,我们希望避免像过去那样将场景作为字符串引用。如中所述,场景对象只是一个运行时数据。因此,它仅在打开或运行时可用。您可能会为要操作的字段绘制自定义检查器 如果您只想在BuildSettings中定义场景 您可以使用UnityEditor命名空间

我需要在检查器中使用场景对象(从新的场景管理器)进行查看和操作。 即使我尝试使用

[SerializeField]
Scene scene;
这个场景仍然没有在《检查员》中出现。 由于SceneManager是相当新的(Unity 5),因此没有太多信息,我们希望避免像过去那样将场景作为字符串引用。

如中所述,场景对象只是一个运行时数据。因此,它仅在打开或运行时可用。您可能会为要操作的字段绘制自定义检查器

如果您只想在BuildSettings中定义场景 您可以使用
UnityEditor
命名空间中的
EditorBuildSettings.scenes
。创建一个自定义检查器字段(如a),以便仅根据BuildSettings中定义的场景进行选择

您还可以使用
SceneSetup
,可以从
UnityEditor.SceneManagement.EditorSceneManager
检索该设置。但这只允许您在场景中或运行时操纵加载的数据


可以为场景对象创建包装器类并为其绘制自定义。然后,您将需要一些类来管理字段中的用户输入,以便在实际场景对象中正确保存数据。

仅存储路径字符串是不够的,因为如果重命名场景文件,则会丢失引用。我们可以使用对的对象引用,但当不在编辑器中时,我们不再有权限查找路径

要可靠地处理文件重命名和运行时路径,您需要两段序列化的数据(编辑器中的对象引用,运行时的字符串路径)。您可以创建一个
SceneReference
对象,该对象用于确保存储的路径始终基于指定的SceneAsset对象有效


例如,以下是我的实现:

为了更好地测量,我添加了一个显示场景的构建状态并提供了一些方便快捷的操作来管理它:

每个按钮都有工具提示,具有破坏性操作确认对话框,并遵守
EditorBuildSettings.asset
(使用测试)的版本控制签出状态