/// <summary> /// 将到组件实体中的数据载入假结构体中 /// </summary> /// <param name="com">unity组件</param> /// <param name="buffer">数据缓存器</param> /// <returns></returns> public unsafe override FakeStruct LoadFromObject(Component com, DataBuffer buffer) { var trans = com as Transform; if (trans == null) { return(null); } FakeStruct fake = new FakeStruct(buffer, TransfromData.ElementSize); TransfromData *td = (TransfromData *)fake.ip; td->insID = trans.GetInstanceID(); td->localEulerAngles = trans.localEulerAngles; td->localPosition = trans.localPosition; td->localScale = trans.localScale; td->name = buffer.AddData(trans.name); td->tag = buffer.AddData(trans.tag); var coms = com.GetComponents <Component>(); td->type = gameobjectBuffer.GetTypeID(coms); td->layer = trans.gameObject.layer; List <Int16> tmp = new List <short>(); for (int i = 0; i < coms.Length; i++) { if (!(coms[i] is Transform)) { Int32 type = gameobjectBuffer.GetTypeIndex(coms[i]); if (type >= 0) { var loader = gameobjectBuffer.GetDataLoader(type); if (loader != null) { var fs = loader.LoadFromObject(coms[i], buffer); tmp.Add((Int16)buffer.AddData(fs)); } else { tmp.Add(0); } tmp.Add((Int16)type); } } } td->coms = buffer.AddData(tmp.ToArray()); int c = trans.childCount; if (c > 0) { Int16[] buf = new short[c]; for (int i = 0; i < c; i++) { var fs = LoadFromObject(trans.GetChild(i), buffer); buf[i] = (Int16)buffer.AddData(fs); } td->child = buffer.AddData(buf); } return(fake); }
public static unsafe FakeStruct LoadFromObject(Component com, DataBuffer buffer) { var trans = com as Transform; if (trans == null) { return(null); } FakeStruct fake = new FakeStruct(buffer, TransfromData.ElementSize); TransfromData *td = (TransfromData *)fake.ip; td->localEulerAngles = trans.localEulerAngles; td->localPosition = trans.localPosition; td->localScale = trans.localScale; td->name = buffer.AddData(trans.name); td->tag = buffer.AddData(trans.tag); var coms = com.GetComponents <Component>(); td->type = ModelManager2D.GetTypeIndex(coms); List <Int16> tmp = new List <short>(); for (int i = 0; i < coms.Length; i++) { if (!(coms[i] is Transform)) { Int16 type = 0; var fs = ModelManager2D.LoadFromObject(coms[i], buffer, ref type); tmp.Add((Int16)buffer.AddData(fs)); tmp.Add(type); } } td->coms = buffer.AddData(tmp.ToArray()); int c = trans.childCount; if (c > 0) { Int16[] buf = new short[c]; for (int i = 0; i < c; i++) { var fs = LoadFromObject(trans.GetChild(i), buffer); buf[i] = (Int16)buffer.AddData(fs); } td->child = buffer.AddData(buf); } return(fake); }