unsafe static void LoadChild(Transform root, DataBuffer db, FakeStructArray array) { var c = root.childCount; for (int i = 0; i < c; i++) { var t = root.GetChild(c); var name = t.name; int l = array.Length; for (int j = 0; j < l; j++) { LocalCoordinates *lc = (LocalCoordinates *)array[j]; string str = db.GetData(lc->Name) as string; if (str == name) { t.localPosition = lc->Postion; t.localRotation = lc->Rotate; t.localScale = lc->Scale; var arr = db.GetData(lc->Child) as FakeStructArray; if (arr != null) { LoadChild(t, db, arr); } } } } }
public static unsafe byte[] Save(Transform root) { DataBuffer db = new DataBuffer(1024); FakeStruct fake = new FakeStruct(db, LocalCoordinates.ElementSize); LocalCoordinates *lc = (LocalCoordinates *)fake.ip; lc->Postion = root.localPosition; lc->Rotate = root.localRotation; lc->Scale = root.localScale; lc->Name = db.AddData(root.name); lc->Child = db.AddData(SaveChild(root, db)); db.fakeStruct = fake; return(db.ToBytes()); }
public static unsafe void Load(Transform root, byte[] data) { DataBuffer db = new DataBuffer(data); FakeStruct fake = db.fakeStruct; LocalCoordinates *lc = (LocalCoordinates *)fake.ip; root.localPosition = lc->Postion; root.localRotation = lc->Rotate; root.localScale = lc->Scale; var array = db.GetData(lc->Child) as FakeStructArray; if (array != null) { LoadChild(root, db, array); } }
static unsafe FakeStructArray SaveChild(Transform root, DataBuffer db) { int c = root.childCount; if (c > 0) { FakeStructArray array = new FakeStructArray(db, LocalCoordinates.ElementSize, c); Int32[] cc = new int[c]; for (int i = 0; i < c; i++) { var a = root.GetChild(i); LocalCoordinates *lc = (LocalCoordinates *)array[i]; lc->Postion = a.localPosition; lc->Rotate = a.localRotation; lc->Scale = a.localScale; lc->Name = db.AddData(a.name); lc->Child = db.AddData(SaveChild(a, db)); } return(array); } return(null); }