/// <summary>
        /// 将场景内的对象保存到文件
        /// </summary>
        /// <param name="uiRoot"></param>
        /// <param name="path"></param>
        public static void SavePrefab(Transform uiRoot, string path)
        {
            DataBuffer db = new DataBuffer(1024);

            db.fakeStruct = TransfromModel.LoadFromObject(uiRoot, db);
            File.WriteAllBytes(path, db.ToBytes());
        }
        static void ReflectionObject(Transform t, object o, TransfromModel mod)
        {
            var m = o.GetType().GetField(t.name);

            if (m != null)
            {
                if (typeof(Component).IsAssignableFrom(m.FieldType))
                {
                    m.SetValue(o, t.GetComponent(m.FieldType));
                }
            }
        }
        unsafe public override void Load(FakeStruct fake)
        {
            transfrom = *(TransfromData *)fake.ip;
            var buff = fake.buffer;

            Int16[] coms = buff.GetData(transfrom.coms) as Int16[];
            if (coms != null)
            {
                for (int i = 0; i < coms.Length; i++)
                {
                    int index = coms[i];
                    i++;
                    int type = coms[i];
                    var fs   = buff.GetData(index) as FakeStruct;
                    if (fs != null)
                    {
                        var dc = ModelManager2D.Load(type);
                        if (dc != null)
                        {
                            dc.Load(fs);
                            components.Add(dc);
                        }
                    }
                }
            }
            Int16[] chi = fake.buffer.GetData(transfrom.child) as Int16[];
            if (chi != null)
            {
                for (int i = 0; i < chi.Length; i++)
                {
                    var fs = buff.GetData(chi[i]) as FakeStruct;
                    if (fs != null)
                    {
                        TransfromModel model = new TransfromModel();
                        model.Load(fs);
                        child.Add(model);
                    }
                }
            }
            name = buff.GetData(transfrom.name) as string;
            tag  = buff.GetData(transfrom.tag) as string;
        }
        public unsafe static PrefabAsset LoadModels(byte[] buff, string name)
        {
            DataBuffer     db    = new DataBuffer(buff);
            TransfromModel model = new TransfromModel();

            model.Load(db.fakeStruct);
            var asset = new PrefabAsset();

            asset.models = model;
            asset.name   = name;
            for (int i = 0; i < prefabAssets.Count; i++)
            {
                if (prefabAssets[i].name == name)
                {
                    prefabAssets.RemoveAt(i); break;
                }
            }
            prefabAssets.Add(asset);
            return(asset);
        }
        /// <summary>
        /// 使用模型数据,实例化对象
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="o"></param>
        /// <param name="parent"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        public static GameObject LoadToGame(TransfromModel mod, object o, Transform parent, string filter = "mod")
        {
            if (mod == null)
            {
#if DEBUG
                Debug.Log("Mod is null");
#endif
                return(null);
            }
            if (mod.tag == filter)
            {
                return(null);
            }
            var g = CreateNew(mod.transfrom.type);
            if (g == null)
            {
#if DEBUG
                Debug.Log("Name:" + mod.name + " is null");
#endif
                return(null);
            }
            var t = g.transform;
            if (parent != null)
            {
                t.SetParent(parent);
            }
            mod.LoadToObject(g.transform);
            mod.Main = g;
            var c = mod.child;
            for (int i = 0; i < c.Count; i++)
            {
                LoadToGame(c[i], o, t, filter);
            }
            if (o != null)
            {
                ReflectionObject(t, o, mod);
            }
            return(g);
        }