0

我在这里遇到了一个奇怪的行为 - 当我创建一个包含类数组的简单 C# 脚本时,其中脚本类和数组类都标记为可序列化,我的场景视图开始滞后于移动鼠标(当包含脚本组件的游戏对象被选中)。此外,当数组类有更多成员时,延迟会增加,这些成员被标记为 SerializeField。

如果我在我的数组上添加属性 [field: NonSerialized],那么滞后就消失了。此外,[HideInInspector] 并没有改变任何事情 - 在我看来,某些事情正在导致统一序列化每一帧的脚本内容 - 这会有点奇怪,因为什么会导致这种行为?

有人知道解决方案吗?

[编辑:代码片段]

using System;
using UnityEngine;

[Serializable]
public class TestObject{
    public int              IndexX;
    public int              IndexY;
    public int              LengthX;
    public int              LengthY;
    public float            AnimationLength;
    public bool             Animate;
    public float            AnimationSpeed;



    [SerializeField]
    private GameObject      mGameObject;

}


[Serializable]
public class TestScript{

  [HideInInspector]
  public TestObject[] Objects       = new TestObject[256*64];

  void Start(){

  }

  void Update(){

  }

}

这个非常简短和基本的脚本会导致滞后问题......但是 256x64 的数组应该不难序列化。我正在构建一个 Jump'n'Run 游戏 - 我很高兴收到“OnSerialize”和“OnDeserialize”之类的消息,所以我可以以更简单的格式保存和重新加载我的图块,统一保存图块游戏对象,它网格化一个东西 - 但那是一个重载......试图制作这样的东西,有两个列表并监听“唤醒”消息 - 但如果我在编辑器中收到消息,我无法删除现有的游戏对象 - 它会太好了,如果我可以在编辑器重新加载数据时删除并重新创建它们。

4

1 回答 1

1

256*64 = 16384 个对象。为避免丢帧,您需要让每个帧在 0.002 毫秒(1/30/16384)内序列化,这是一项艰巨的任务......

你能避免在游戏线程中序列化的需要吗?你能产生一个线程来异步进行序列化吗?这样您就可以继续响应用户...

于 2013-02-12T11:40:57.900 回答