using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; /// /// 可编辑脸部部位 /// public enum EditableFacePart { eyebrow, eye, mousewidth } /// /// 可编辑身体部位 /// public enum EditableBodyPart { UpperArm = 0, LowerArm = 1, Hand = 2, UpperLeg = 3, LowerLeg = 4, Foot = 5, All = 6, Neck = 7, Clavicle = 8, Shoulder = 9, Chest = 10,//胸 Pleural = 11,//胸腔下部 Belly = 12,//肚子 UpperArmUp = 13, UpperArmDown = 14, UpperLegUp = 15, UpperLegDown = 16, LowerLegUp = 17, LowerLegDown = 18, Head = 19, Acromion = 20,//肩峰 Waist = 21,//腰 Wrist = 22,//手腕 Crotch = 23,//胯部 Hips = 24,//臀部 Knee = 25,//膝盖 Ankle = 26,//脚腕 None = 27, } /// /// 编辑类型 /// public enum ModifyType { Length = 0,//长 Width = 1,//宽 Thick = 2,//厚度 LengthWidthThick = 3,//长宽厚 Angle = 4,//角度 UpDown = 5,//上下 LeftRight = 6,//左右 ForwardBehind = 7,//前后 } public static class CustomRoleUtility { public static void UpdateBoneScale(Animator ani,EditableBodyPart part, Vector3 scale,bool keepChildWorldScale, float value) { Transform[] transList = GetRelativeTransform(ani,part); Vector3 beforeScale = Vector3.one; if(transList == null) { return; } for (int i = 0; i < transList.Length; i++) { var trans = transList[i]; if(trans == null) { continue; } beforeScale = trans.localScale; var world_l = trans.lossyScale; if (scale.x == 1) trans.SetLocalScaleX(trans.localScale.x * value / world_l.x); if (scale.y == 1) trans.SetLocalScaleY(trans.localScale.y * value / world_l.y); if (scale.z == 1) trans.SetLocalScaleZ(trans.localScale.z * value / world_l.z); //修改子物体的缩放 if (!keepChildWorldScale) { continue; } var lcount = trans.childCount; for (int j = 0; j < lcount; j++) { var childTrans = trans.GetChild(j); var oldScale = childTrans.localScale; if (scale.x == 1) childTrans.SetLocalScaleX(oldScale.x * beforeScale.x / value); if (scale.y == 1) childTrans.SetLocalScaleY(oldScale.y * beforeScale.y / value); if (scale.z == 1) childTrans.SetLocalScaleZ(oldScale.z * beforeScale.z / value); } } } public static Transform[] GetRelativeTransform(Animator ani,EditableBodyPart part) { Transform[] result = null; switch (part) { case EditableBodyPart.UpperArm: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftUpperArm); result[1] = ani.GetBoneTransform(HumanBodyBones.RightUpperArm); break; case EditableBodyPart.LowerArm: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftLowerArm); result[1] = ani.GetBoneTransform(HumanBodyBones.RightLowerArm); break; case EditableBodyPart.Hand: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftHand); result[1] = ani.GetBoneTransform(HumanBodyBones.RightHand); break; case EditableBodyPart.UpperLeg: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftUpperLeg); result[1] = ani.GetBoneTransform(HumanBodyBones.RightUpperLeg); break; case EditableBodyPart.LowerLeg: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftLowerLeg); result[1] = ani.GetBoneTransform(HumanBodyBones.RightLowerLeg); break; case EditableBodyPart.Foot: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftFoot); result[1] = ani.GetBoneTransform(HumanBodyBones.RightFoot); break; case EditableBodyPart.All: result = new Transform[1]; result[0] = ani.GetBoneTransform(HumanBodyBones.Spine); break; case EditableBodyPart.Neck: result = new Transform[1]; result[0] = ani.GetBoneTransform(HumanBodyBones.Neck); break; case EditableBodyPart.Clavicle: result = new Transform[1]; //result[0] = ani.GetBoneTransform(HumanBodyBones.cl); break; case EditableBodyPart.Shoulder: result = new Transform[2]; result[0] = ani.GetBoneTransform(HumanBodyBones.LeftShoulder); result[1] = ani.GetBoneTransform(HumanBodyBones.RightShoulder); break; case EditableBodyPart.Chest: result = new Transform[2]; var p = ani.GetBoneTransform(HumanBodyBones.Chest); result[0] = GetChild(p, "Chest_L"); result[1] = GetChild(p, "Chest_R"); break; case EditableBodyPart.Pleural: break; case EditableBodyPart.Belly: break; case EditableBodyPart.UpperArmUp: break; case EditableBodyPart.UpperArmDown: break; case EditableBodyPart.UpperLegUp: break; case EditableBodyPart.UpperLegDown: break; case EditableBodyPart.LowerLegUp: break; case EditableBodyPart.LowerLegDown: break; case EditableBodyPart.Head: result = new Transform[1]; result[0] = ani.GetBoneTransform(HumanBodyBones.Head); break; case EditableBodyPart.Acromion: break; case EditableBodyPart.Waist: break; case EditableBodyPart.Wrist: break; case EditableBodyPart.Crotch: break; case EditableBodyPart.Hips: break; case EditableBodyPart.Knee: break; case EditableBodyPart.Ankle: break; case EditableBodyPart.None: break; default: break; } return result; } public static void GetNormalAniBonesScale(Animator ani,ref Dictionary boneDic) { for (int i = 0; i < Enum.GetValues(typeof(HumanBodyBones)).Length - 1; i++) { var trans = ani.GetBoneTransform((HumanBodyBones)i); if(trans) { boneDic.Add(trans.name, trans.lossyScale); } } } public static Transform GetChild(Transform trans,string name) { for (int i = 0; i < trans.childCount; i++) { if(trans.GetChild(i).name == name) { return trans.GetChild(i); }else { var childTrans = GetChild(trans.GetChild(i),name); if(childTrans != null) { return childTrans; } } } return null; } public static void ShowFile() { FileStream fs = File.Open("E:/key.key", FileMode.Open); FileStream fsout = File.Open("E:/keyout4.key", FileMode.Create); BinaryReader br = new BinaryReader(fs); BinaryWriter bw = new BinaryWriter(fsout); Byte[] byData = br.ReadBytes((int)fs.Length); var t = "NKnFb79Sxk+4Xw284MQleA=="; var pid = "1639047545434X1016017"; fs.Close(); //var iv = new byte[16]; //var key = new byte[16]; //for (int i = 0; i < byData.Length; i++) //{ // if(i <= 15) // { // iv[i] = byData[i]; // var ivx = byData[i].ToString("x"); // Debug.Log(iv[i] + " : " + ivx); // } // else // { // key[i - 16] = byData[i]; // var keyx = byData[i].ToString("x"); // Debug.Log(key[i - 16] + " : " + keyx); // } //} //var str = DecryptStringFromBytes_Aes(byData, iv, key); //Debug.Log("result" + str); Debug.Log(byData.Length); IList bData = new List(); string[] strHexs = new string[16]; int[] intData = { 52, 202, 48, 138, 68, 75, 239, 159, 27, 50, 70, 255, 10, 248, 131, 73 }; for (int i = 0; i < 16; i++) { int a = intData[i]; strHexs[i] = a.ToString("x"); //strHexs[i] = a.ToString(); Debug.Log(a + " : " + a.ToString("x")); } foreach (var item in strHexs) { Debug.Log(Convert.ToByte(item, 16)); bData.Add(Convert.ToByte(item, 16)); } bw.Write(bData.ToArray()); fsout.Close(); } }