我在这里得到一个奇怪的行为 - 当我创建一个简单的C#脚本,其中包含一个类数组,其中脚本类和数组类都标记为Serializable,我的sceneview开始滞后于移动鼠标(当选择包含脚本组件的gameobject时)。此外,当数组类有更多成员时,滞后会增加,这些成员被标记为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",所以我可以以更简单的格式保存和重新加载我的瓷砖,统一保存瓷砖游戏框架,它的网格物体 - 但这是一个沉重的超载...试图做这样的事情,有两个列出并聆听"清醒"消息 - 但如果我在编辑器中收到消息,我就无法删除现有的游戏对象 - 如果我可以在编辑器重新加载数据时删除并重新创建它们,那就太好了。
答案 0 :(得分:1)
256 * 64 = 16384个对象。 为了避免丢帧,你需要让每一个序列化在0.002ms(1/30/16384)之内,这是一个很高的订单......
你可以避免在游戏线程中序列化吗?你可以产生一个线程来异步进行序列化吗?这样你就可以继续回应用户......