public AnimatorParameter(AssetParameter.Parameter pData, int pIndex)
        {
            parameter = pData;
            index     = pIndex;

            intValue   = pData.defaultInt;
            floatValue = pData.defaultFloat;
            boolValue  = pData.defaultBool;
        }
        private List <AssetParameter.Parameter> ReadParameters(BinaryReader reader)
        {
            List <AssetParameter.Parameter> ret = new List <AssetParameter.Parameter>();
            int tcount = reader.ReadInt32();

            for (int i = 0; i < tcount; i++)
            {
                AssetParameter.Parameter tpamdata = new AssetParameter.Parameter();
                tpamdata.ReadFromFile(reader);
                ret.Add(tpamdata);
            }
            return(ret);
        }
示例#3
0
        private void SaveAnimationInfo(string name, AnimationBakeInfo pWorkInfo)
        {
            string path = GetFilePath();

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            UnityEditor.Animations.AnimatorController controller = pWorkInfo.animator.runtimeAnimatorController as UnityEditor.Animations.AnimatorController;
            //AssetDatabase.CreateFolder("Assets/Resources", folderName);
            FileStream   file   = File.Open(GetFullPahtFile(name), FileMode.Create);
            BinaryWriter writer = new BinaryWriter(file);

            //存储参数
            int tpamCount = controller.parameters != null ? controller.parameters.Length : 0;

            writer.Write(tpamCount);
            if (controller.parameters != null && controller.parameters.Length > 0)
            {
                AssetParameter.Parameter[] tparms = new AssetParameter.Parameter[tpamCount];
                for (int i = 0; i < tpamCount; i++)
                {
                    AssetParameter.Parameter tpamdata = new AssetParameter.Parameter();
                    tpamdata.CopyData(controller.parameters[i]);
                    tpamdata.WriteToFile(writer);
                }
            }

            writer.Write(layerInfos.Count);
            foreach (var item in layerInfos)
            {
                item.WriteToFile(writer);
            }

            //存储animation State
            writer.Write(aniInfo.Count);
            foreach (var obj in aniInfo)
            {
                AnimationInfo info = (AnimationInfo)obj;
                //writer.Write(info.animationNameHash);
                writer.Write(info.animationName);
                writer.Write(info.animationIndex);
                writer.Write(info.textureIndex);
                writer.Write(info.totalFrame);
                writer.Write(info.fps);
                writer.Write(info.rootMotion);
                writer.Write((int)info.wrapMode);
                if (info.rootMotion)
                {
                    Debug.Assert(info.totalFrame == info.velocity.Length);
                    for (int i = 0; i != info.velocity.Length; ++i)
                    {
                        writer.Write(info.velocity[i].x);
                        writer.Write(info.velocity[i].y);
                        writer.Write(info.velocity[i].z);

                        writer.Write(info.angularVelocity[i].x);
                        writer.Write(info.angularVelocity[i].y);
                        writer.Write(info.angularVelocity[i].z);
                    }
                }
                writer.Write(info.eventList.Count);
                foreach (var evt in info.eventList)
                {
                    writer.Write(evt.function);
                    writer.Write(evt.floatParameter);
                    writer.Write(evt.intParameter);
                    writer.Write(evt.stringParameter);
                    writer.Write(evt.time);
                    writer.Write(evt.objectParameter);
                }
            }

            //attach
            writer.Write(exposeAttachments);
            if (exposeAttachments)
            {
                writer.Write(extraBoneInfo.extraBone.Length);
                for (int i = 0; i != extraBoneInfo.extraBone.Length; ++i)
                {
                    writer.Write(extraBoneInfo.extraBone[i]);
                }
                for (int i = 0; i != extraBoneInfo.extraBindPose.Length; ++i)
                {
                    for (int j = 0; j != 16; ++j)
                    {
                        writer.Write(extraBoneInfo.extraBindPose[i][j]);
                    }
                }
            }

            //boneTexture
            Texture2D[] texture = bakedBoneTexture;
            writer.Write(texture.Length);
            writer.Write(textureBlockWidth);
            writer.Write(textureBlockHeight);
            for (int i = 0; i != texture.Length; ++i)
            {
                byte[] bytes = texture[i].GetRawTextureData();
                writer.Write(texture[i].width);
                writer.Write(texture[i].height);
                writer.Write(bytes.Length);
                writer.Write(bytes);
            }

            file.Close();
            aniInfo.Clear();
        }