Пример #1
0
        private static int BakeClip(GameObject go, SkinnedMeshRenderer skin, Animation anim, AnimTextureManifest manifest, List <int> yList)
        {
            var index = 0;

            foreach (AnimationState state in anim)
            {
                //tex
                var y   = yList[index];
                var tex = AnimTextureUtils.BakeMeshToTexture(skin, go, state.clip);
                manifest.atlas.SetPixels(0, y, tex.width, tex.height, tex.GetPixels());
                Object.DestroyImmediate(tex);

                manifest.animInfos.Add(new AnimTextureClipInfo(state.name, y, yList[index + 1])
                {
                    isLoop = state.clip.isLooping,
                    length = state.clip.length
                });
                index++;
            }

            return(index);
        }
        private static int BakeClip(GameObject go, SkinnedMeshRenderer skin, List <AnimClipData> clips, AnimTextureManifest manifest, List <int> yList, Dictionary <int, AnimClipData> states)
        {
            var index = 0;

            foreach (AnimClipData data in clips)
            {
                //tex
                var       y          = yList[index];
                var       width      = skin.sharedMesh.vertexCount;
                var       frameCount = (int)(data.clip.length * data.clip.frameRate);
                Texture2D posTex     = null;
                Texture2D normalTex  = null;
                Texture2D tangentTex = null;
                AnimTextureUtils.BakeMeshToTexture(skin, go, data.clip, out posTex, out normalTex, out tangentTex);
                manifest.posTex.SetPixels(0, y, posTex.width, posTex.height, posTex.GetPixels());
                manifest.normalTex.SetPixels(0, y, normalTex.width, normalTex.height, normalTex.GetPixels());
                manifest.tangentTex.SetPixels(0, y, tangentTex.width, tangentTex.height, tangentTex.GetPixels());
                Object.DestroyImmediate(posTex);
                Object.DestroyImmediate(normalTex);
                Object.DestroyImmediate(tangentTex);

                manifest.animInfos.Add(new AnimTextureClipInfo(data.clip.name, y, yList[index + 1])
                {
                    isLoop    = data.clip.isLooping,
                    length    = data.clip.length,
                    frameRate = data.clip.frameRate,
                    speed     = data.speed
                });
                index++;
            }

            foreach (var state in states)
            {
                int i = 0;
                for (; i < clips.Count; i++)
                {
                    if (state.Value.clip.name == clips[i].clip.name)
                    {
                        break;
                    }
                }
                manifest.stateInfos.Add(new StateInfo(state.Key, i));
            }

            return(index);
        }