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); }
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(); }