ここで奇妙な動作が発生します。クラスの配列を保持する単純な 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」などのメッセージを受け取ることができれば非常にうれしいので、タイルをより単純な形式で保存および再ロードできます。unity はタイル gameobjecs を保存します。ものをメッシュします-しかし、それは重いオーバーロードです..2つのリストを使用して、「起動」メッセージをリッスンするこのようなものを作成しようとしました-しかし、エディターでメッセージを取得した場合、既存のゲームオブジェクトを削除できません-それはエディターがデータをリロードするときに、それらを削除して再作成できればいいのですが。