即使使用空的自定义检查器,选择 150MB ScriptableObject 也非常慢(Unity)

问题描述 投票:0回答:1

我有这个大型 ScriptableObject (+150MB),用于存储与游戏中角色相关的各种数据。

选择后,Unity 编辑器的速度会大大减慢,我的第一个想法是创建一个自定义检查器,因为默认设置可能会很慢,其中包含所有收集数据。

但即使使用这个空的自定义检查器,在编辑器中选择大型 ScriptableObject 时也会出现同样的速度减慢。

[CustomEditor(typeof(NPCData))]
public class NPCDataEditor : Editor
{
    CustomSampler samplerOnInspectorGUI = CustomSampler.Create("samplerOnInspectorGUI");
    CustomSampler samplerOnEnable = CustomSampler.Create("samplerOnEnable");

    private void OnEnable()
    {
        onEnableSampler.Begin();
        Debug.Log("NPCDataEditor::OnEnable");
        onEnableSampler.End();
    }

    public override void OnInspectorGUI()
    {
        OnInspectorGUISampler.Begin();
        // base.OnInspectorGUI();
        OnInspectorGUISampler.End();
    }
}

令我惊讶的是,这并没有帮助,当在编辑器中选择 ScriptableObject 时,Unity 仍然在处理 ScriptableObject 的大小问题。

enter image description here

因此,我认为我应该创建一个单独的编辑器窗口或代理脚本对象,它从大型 ScriptableObject 异步加载数据,然后仅在其自己的轻量级自定义检查器/窗口中呈现一小部分数据。

这样,大型 ScriptableObject 将不会在编辑器中被选择,我仍然可以通过代码操作它的数据。

但这听起来并不理想。

谢谢你,

unity-game-engine optimization game-development unity-editor
1个回答
0
投票

我通过创建自定义编辑器窗口并加载/缓存可编写脚本的对象解决了这个问题。

然后我在窗口内渲染了可编写脚本的对象检查器。

不再减速。无需使用自定义检查器创建较小的代理复制脚本对象。

我们使用 ODIN,因此创建窗口并嵌入 SO 检查器只需几行即可完成。

附注我们总是在游戏中明确禁用 ODIN 序列化,我们只保留编辑器的好处。

© www.soinside.com 2019 - 2024. All rights reserved.