准备使用二进制缓存来全面实现高速加载

This commit is contained in:
2025-12-12 17:46:15 +08:00
parent a3ea09c2a9
commit f724058cea
5 changed files with 360 additions and 1 deletions

View File

@@ -10,8 +10,10 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Unity.Collections;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Rendering;
namespace Demo
{
@@ -36,6 +38,53 @@ namespace Demo
}
}
public class ScriptLoadableConfig
{
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling;
public bool IsSetObjectDisable;
public int UpdatePerFrame;
public string ScriptName;
private string[] ChildTypes;
public ScriptLoadableConfig[] childs;
public readonly static Dictionary<string, Func<ScriptLoadableConfig>> ConfigGeneraters = new()
{
{ nameof(ScriptLoadableConfig), ()=>new ScriptLoadableConfig() }
};
public virtual void Deserialize(BinaryReader reader)
{
EnterGameLocalPosition = BinarySerializeUtility.ReadVec3(reader);
EnterGameEulerAngles = BinarySerializeUtility.ReadVec3(reader);
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
IsSetObjectDisable = BinarySerializeUtility.ReadBool(reader);
UpdatePerFrame = BinarySerializeUtility.ReadInt(reader);
ScriptName = BinarySerializeUtility.ReadString(reader);
ChildTypes = BinarySerializeUtility.DeserializeStringArray(reader);
int childCount = ChildTypes.Length;
childs = new ScriptLoadableConfig[childCount];
for (int i = 0; i < childCount; i++)
{
childs[i] = ConfigGeneraters[ChildTypes[i]].Invoke();
childs[i].Deserialize(reader);
}
}
public virtual void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalPosition);
BinarySerializeUtility.WriteVec3(writer, EnterGameEulerAngles);
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
BinarySerializeUtility.WriteBool(writer, IsSetObjectDisable);
BinarySerializeUtility.WriteInt(writer, UpdatePerFrame);
BinarySerializeUtility.WriteString(writer, ScriptName);
BinarySerializeUtility.SerializeArray(writer, ChildTypes);
foreach (var child in childs)
{
child.Serialize(writer);
}
}
}
public partial class ScriptableObject : IScriptableObject
{
/// <summary>