using System.Collections.Generic; using System.IO; using System.Runtime.InteropServices; using Newtonsoft.Json; using MindPowerSdk; using UnityEngine; namespace MindPowerSdk { [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)] public abstract class CRawDataInfo { public int bExist; public int nIndex; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)] public string szDataName; public uint dwLastUseTick; public int bEnable; public uint pData; public uint dwPackOffset; public uint dwDataSize; public int nID; public uint dwLoadCnt; } /// /// 所有的配置数据,读取方式都是一样的(只要布局好结构) /// /// public abstract class CRawDataSet where T : CRawDataInfo { public T[] Data { get; private set; } private Dictionary _idMap; public void LoadBin(string file) { using var fs = File.OpenRead(file); using BinaryReader reader = new BinaryReader(fs); long fileSize = fs.Length; uint infoSize = reader.ReadUInt32(); int resNum = (int)(fileSize / infoSize); Debug.Log($"{file} - {infoSize}({resNum})"); Data = new T[resNum]; _idMap = new Dictionary(resNum); for (int i = 0; i < resNum; i++) { byte[] data = reader.ReadBytes((int)infoSize); T info = StructReader.ReadStructFromArray(data); Data[i] = info; _idMap.Add(info.nID, i); //Debug.Log(JsonConvert.SerializeObject(info)); } } public T Get(int id) { return Data[_idMap[id]]; } } }