【问题标题】:Accessing CustomEditor Inspector values from another scene从另一个场景访问 CustomEditor Inspector 值
【发布时间】:2013-04-24 18:22:57
【问题描述】:

所以我使用 CustomEditor 设置来制作 Spawn Point 管理器。我已经设置好在场景中添加生成点(我们称之为房间 1),那里没有问题。接下来我需要做的是加载一个不同的场景(房间 2)并让门交互参考房间 1 的生成点。除了如何获取房间 1 中的生成点列表之外,我已经设置了方程式的所有部分我正在编辑 Room 2 场景时。

在我编辑 Room 2 场景时,有没有办法调用 Room 1 场景中对象中设置的值的查询?请记住,这是在编辑器/检查器中,而不是在应用程序运行时,所以我认为播放器首选项和 DontDestroyOnLoad 在这里没有帮助。

有什么想法吗?谢谢!

【问题讨论】:

    标签: c# editor unity3d inspector


    【解决方案1】:

    有没有办法调用一个对象中设置的值的查询 我正在编辑 Room 2 场景时使用 Room 1 场景?

    不,你不能。编辑器让您同时打开一个场景。您可以将不同的场景视为不同的世界。 您可以使用EditorApplication.OpenSceneAdditive 将场景的内容添加到当前打开的场景中。顺便说一句,这对您的情况没有用,因为添加的场景对象被复制到打开的对象中。

    如果您需要在场景之间共享对象,您有两种方法:

    1. 如果您的组件附加到游戏对象,请为您的 SpawnPoint 管理器使用 Prefab
    2. 如果您不想/可以使用 GameObject 来存储您的 SpawnPoint 管理器(我不认为是这种情况),您可以考虑使用 AssetDatabase。基本上,您可以在其中存储从ScriptableObject 派生的每个可序列化类。

    在你的情况下,我或多或少会做以下事情:

    • 创建一个空的GameObject 并附加一个名为SpawnPointManagerComponent
    • 从创建的GameObject 创建一个Prefab
    • 在所有场景中添加您经理的Prefab instance
    • 最终定义一个自定义 Editor 用于从自定义检查器修改您的 SpawnPointManager Component

    由于您所有的Prefab instances 都链接到同一个Prefab,即使它们在不同的场景中,基本上也共享相同的对象(可从检查器访问)。因此,如果您修改 prefab 它自己(或它的一个实例并将修改应用回链接的预制件),您的所有预制件实例(即使在不同的场景中)都会看到修改并相应地更新为链接的预制件

    【讨论】:

    • 预制件基本上是我已经完成的。不幸的是,如果我不断将更改复制到根预制件中,则无法区分场景。如果房间 1 有 4 个生成点,而房间 2 有 3 个,那么预制件就无法真正更新。为了跨场景访问信息,预制件需要了解所有信息。但为了让预制件知道一切,它必须保存一些场景不想要的生成点。
    • 我最终做的只是使用一个枚举来列出可供选择的可能名称,并允许用户在创建生成点时设置该名称。您可以使用加载触发器访问相同的列表。它不像我想要的那样动态,如果您需要一个新名称,则需要更新枚举,但它仍然比手动输入名称更好(太多人为错误)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多