我需要在检查器中使用Scene对象(来自新的SceneManager)进行查看和操作。 即使我尝试使用
序列化它[SerializeField]
Scene scene;
现场仍未在检查员中显示。 由于SceneManager相当新(Unity 5),因此没有太多信息,我们希望避免将场景作为字符串引用,就像我们以前一样。
答案 0 :(得分:0)
如documentation中所述,Scene对象只是一个运行时数据。因此,它仅在打开或运行时可用。您可能会为要操作的字段绘制自定义检查器。
如果您只想在BuildSettings中定义场景
您可以使用EditorBuildSettings.scenes
命名空间中的UnityEditor
。创建自定义Inspector字段(如Enum Popup),仅根据BuildSettings中定义的场景进行选择。
您还可以使用SceneSetup
,UnityEditor.SceneManagement.EditorSceneManager
可以从var classApp = angular.module('classApp', []);
classApp.controller('classCtrl', function ($scope, $timeout) {
$scope.isActive = false;
$scope.activeButton = function () {
$scope.isActive = !$scope.isActive;
}
function checkTime() {
$scope.isActive = !$scope.isActive;
}
$timeout(checkTime, 2000)
});
检索。但这只允许您在场景中或在运行时操纵加载的数据。
您可以为Scene对象创建一个包装类,并为其绘制自定义Property drawer。然后,您需要一些类来管理字段中的用户输入,以便将数据正确保存在实际的Scene对象中。
答案 1 :(得分:0)
仅存储路径字符串是不够的,因为如果重命名场景文件,您将丢失参考。我们可以使用对SceneAsset的Object引用,但是当不在编辑器中时,我们将无法再访问AssetDatabase
来查找路径。
要可靠地处理文件重命名和运行时路径,您需要两个序列化的数据(编辑器中的对象引用,运行时的字符串路径)。您可以创建一个SceneReference
对象,该对象使用ISerializationCallbackReceiver
来确保所存储的路径始终基于指定的SceneAsset对象有效。
作为示例,这是我的实现:https://gist.github.com/JohannesMP/ec7d3f0bcf167dab3d0d3bb480e0e07b
为了很好,我添加了一个PropertyDrawer
,它显示了场景的构建状态,并提供了一些方便的快速操作来对其进行管理:
每个按钮都有一个工具提示,具有破坏性的操作确认对话框,并遵守EditorBuildSettings.asset
的VersionControl检出状态(已通过Perforce测试)。