예제 #1
0
        public void BuildAnim(MeshSkinData skinData)
        {
            int count = AttachCount;

            for (int i = 0; i < count; i++)
            {
                //UnityEngine.Profiling.Profiler.BeginSample("Load Cfg");
                BuildAnimByCombinedTex(skinData, i);
                //UnityEngine.Profiling.Profiler.EndSample();
            }
        }
예제 #2
0
        public void BuildAnimByCombinedTex(MeshSkinData skinData, int attachId)
        {
            int totalNum = skinData.arrayLength; //attach num

            //int maxVertex = skinData.maxVertexCount;

            if (attachId >= totalNum)
            {
                UnityEngine.Debug.LogError("over the attach size");
                return;
            }

            //读取8个动作数据
            for (int i = 0; i < 8; i++)
            {
                string animationName = g_defaultAnimationArray[i];
                if (!animationName.StartsWith("Wait") && !skinData.isLoadAllInMainScene)
                {
                    continue;
                }

                MeshSkinData.ClipData clip = skinData.meshes[attachId].clips[i];

                int frameCount = clip.frames.Length;
                if (frameCount == 0)
                {
                    continue;
                }

                Vector3[][] animData = new Vector3[frameCount][];

                //每个动作顶点
                for (int curFrame = 0; curFrame < frameCount; curFrame++)
                {
                    animData[curFrame] = clip.frames[curFrame].vertexs;
                }

                Dictionary <string, MeshAnimationData> animationDataDict;
                bool hasDict = AnimationsWithAttach.TryGetValue(attachId, out animationDataDict);
                if (!hasDict)
                {
                    animationDataDict = new Dictionary <string, MeshAnimationData>();
                    AnimationsWithAttach.Add(attachId, animationDataDict);
                }

                animationDataDict.Add(animationName,
                                      new MeshAnimationData(animationName, animData, skinData.GenerateNormal));
            }
        }
예제 #3
0
        public void LoadAnimationGroupSkinData(int pUnitId, string pActorName, MeshSkinData skinData,
                                               Action <MeshAnimationGroup> pCallback)
        {
            MeshAnimationGroup group;

            if (m_cachedGroups.TryGetValue(pUnitId, out group))
            {
                if (null != group && null != pCallback)
                {
                    pCallback(group);
                }
            }
            else
            {
                if (pCallback != null)
                {
                    m_callbacks.Add(pUnitId, pCallback);
                }

                MeshAnimationGroupData groupData = new MeshAnimationGroupData(skinData);
                groupData.BuildAnim(skinData);

                group = groupData.GetAnimationGroup();
                if (null == group)
                {
                    return;
                }

                m_cachedGroups[pUnitId] = group;
                if (m_callbacks.Count(pUnitId) > 0)
                {
                    foreach (Action <MeshAnimationGroup> callback in m_callbacks.Get(pUnitId))
                    {
                        if (callback != null)
                        {
                            callback(group);
                        }
                    }

                    m_callbacks.Clear(pUnitId);
                }
            }
        }
예제 #4
0
        //public MeshAnimationGroupData (object pGroupSerializable)
        //{
        //          Animations = new Dictionary<string, MeshAnimationData> ();

        //          Texture2D cfgData = pGroupSerializable as Texture2D;

        //          Color[] data = cfgData.GetPixels();
        //          Color cfgLength = data[0];

        //          Fps = (int)cfgLength[0];
        //          float uvLength = cfgLength[1];
        //          float triLength = cfgLength[2];

        //          int cfgDataIdx = 1;
        //          UV = new Vector2[(int)uvLength];
        //          for (int i = 0; i < UV.Length / 2; i++) {
        //              cfgDataIdx++;
        //              int uvIdx = i * 2;
        //              Color singleUv = data[1 + i];
        //              UV[uvIdx].Set(singleUv.r, singleUv.g);
        //              UV[uvIdx + 1].Set(singleUv.b, singleUv.a);
        //          }

        //          Triangles = new int[(int)triLength];
        //          for (int i = 0; i < Triangles.Length / 3; i++) {
        //              int triIdx = i * 3;
        //              Color singleTri = data[cfgDataIdx++];
        //              Triangles[triIdx++] = (int)singleTri.r;
        //              Triangles[triIdx++] = (int)singleTri.g;
        //              Triangles[triIdx++] = (int)singleTri.b;
        //          }

        //          //MeshAnimationGroupSerializable serialzableData = pGroupSerializable as MeshAnimationGroupSerializable;

        //          //Fps = serialzableData.fps;

        //          //BuildUV (serialzableData.floatUV);

        //          //Triangles = serialzableData.triangles;


        //          //ModelName = pGroupSerializable.modelName;

        //          //BoneCount = pGroupSerializable.boneCount;

        //          //BoneNames = pGroupSerializable.boneNames;

        //          //foreach (string key in pGroupSerializable.animations.Keys)
        //          //{
        //          //	MeshAnimationSerializable animation = pGroupSerializable.animations [key];
        //          //	Animations.Add (animation.name, new MeshAnimationData (animation, BoneCount));
        //          //}
        //      }

        public MeshAnimationGroupData(MeshSkinData skinData)
        {
            AnimationsWithAttach = new Dictionary <int, Dictionary <string, MeshAnimationData> >();

            int totalCount = skinData.arrayLength;

            AttachCount = totalCount;

            Uv        = new List <Vector2[]>(totalCount);
            Triangles = new List <int[]>(totalCount);

            for (int i = 0; i < totalCount; ++i)
            {
                Fps = (int)skinData.meshes[i].framerate;

                Uv.Add(skinData.meshes[i].uvs);
                Triangles.Add(skinData.meshes[i].triangles);
            }
        }