准备使用二进制缓存来全面实现高速加载
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user