Esempio n. 1
0
        /// <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);
        }