From f60dd424f4324e81ff18184cd55bcf4e7774fff2 Mon Sep 17 00:00:00 2001 From: CroakFang <1605296300@qq.com> Date: Thu, 29 Jun 2023 22:39:46 +0800 Subject: [PATCH] Add body tracking and dragging, optimize performance --- .../Scripts/PuppetMasterValidation.cs | 5 +- .../Scripts/BipedRagdollReferences.cs | 38 +-- Assets/Resources/UI/d_stepok@2x.png | Bin 0 -> 1501 bytes Assets/Resources/UI/d_stepok@2x.png.meta | 88 ++++++ Assets/Resources/UI/refresh.png | Bin 0 -> 380 bytes Assets/Resources/UI/refresh.png.meta | 92 ++++++ Assets/Scenes/Version2.unity | 264 ++---------------- Assets/Scripts/UmaContainer.cs | 110 +++++++- Assets/Scripts/UmaViewerBuilder.cs | 10 +- Assets/Scripts/UmaViewerUI.cs | 37 --- .../umamusume/Gallop/FaceDrivenKeyTarget.cs | 52 +++- Packages/packages-lock.json | 9 - ProjectSettings/ProjectVersion.txt | 4 +- 13 files changed, 395 insertions(+), 314 deletions(-) create mode 100644 Assets/Resources/UI/d_stepok@2x.png create mode 100644 Assets/Resources/UI/d_stepok@2x.png.meta create mode 100644 Assets/Resources/UI/refresh.png create mode 100644 Assets/Resources/UI/refresh.png.meta diff --git a/Assets/Plugins/RootMotion/PuppetMaster/Scripts/PuppetMasterValidation.cs b/Assets/Plugins/RootMotion/PuppetMaster/Scripts/PuppetMasterValidation.cs index 10faeaf..3cd58ea 100644 --- a/Assets/Plugins/RootMotion/PuppetMaster/Scripts/PuppetMasterValidation.cs +++ b/Assets/Plugins/RootMotion/PuppetMaster/Scripts/PuppetMasterValidation.cs @@ -74,8 +74,9 @@ namespace RootMotion.Dynamics { for (int i = 0; i < muscles.Length; i++) { if (Vector3.SqrMagnitude(muscles[i].joint.transform.position - muscles[i].target.position) > 0.001f) { - if (log) Debug.LogError("The position of each muscle needs to match with the position of it's target. Muscle '" + muscles[i].joint.name + "' position does not match with it's target. Right-click on the PuppetMaster component's header and select 'Fix Muscle Positions' from the context menu.", muscles[i].joint.transform); - return false; + + if (log) Debug.LogWarning("The position of each muscle needs to match with the position of it's target. Muscle '" + muscles[i].joint.name + "' position does not match with it's target. Right-click on the PuppetMaster component's header and select 'Fix Muscle Positions' from the context menu.", muscles[i].joint.transform); + //return false; } } diff --git a/Assets/Plugins/RootMotion/RagdollManager/Scripts/BipedRagdollReferences.cs b/Assets/Plugins/RootMotion/RagdollManager/Scripts/BipedRagdollReferences.cs index 86434e8..460b9a4 100644 --- a/Assets/Plugins/RootMotion/RagdollManager/Scripts/BipedRagdollReferences.cs +++ b/Assets/Plugins/RootMotion/RagdollManager/Scripts/BipedRagdollReferences.cs @@ -212,29 +212,31 @@ namespace RootMotion.Dynamics { BipedRagdollReferences r = new BipedRagdollReferences(); if (!animator.isHuman) { - - r.root = GameObject.Find("Position").transform; + List list = new List(animator.gameObject.GetComponentsInChildren()); + list.Find(t => t.name.Equals("Position")); - r.hips = GameObject.Find("Hip").transform; - r.spine = GameObject.Find("Spine").transform; - r.chest = GameObject.Find("Chest").transform; - r.head = GameObject.Find("Head").transform; + r.root = list.Find(t => t.name.Equals("Position")); - r.leftUpperArm = GameObject.Find("Arm_L").transform; - r.leftLowerArm = GameObject.Find("Elbow_L").transform; - r.leftHand = GameObject.Find("Wrist_L").transform; + r.hips = list.Find(t => t.name.Equals("Hip")); + r.spine = list.Find(t => t.name.Equals("Spine")); + r.chest = list.Find(t => t.name.Equals("Chest")); + r.head = list.Find(t => t.name.Equals("Head")); - r.rightUpperArm = GameObject.Find("Arm_R").transform; - r.rightLowerArm = GameObject.Find("Elbow_R").transform; - r.rightHand = GameObject.Find("Wrist_R").transform; + r.leftUpperArm = list.Find(t => t.name.Equals("Arm_L")); + r.leftLowerArm = list.Find(t => t.name.Equals("Elbow_L")); + r.leftHand = list.Find(t => t.name.Equals("Wrist_L")); - r.leftUpperLeg = GameObject.Find("Thigh_L").transform; - r.leftLowerLeg = GameObject.Find("Knee_L").transform; - r.leftFoot = GameObject.Find("Ankle_L").transform; + r.rightUpperArm = list.Find(t => t.name.Equals("Arm_R")); + r.rightLowerArm = list.Find(t => t.name.Equals("Elbow_R")); + r.rightHand = list.Find(t => t.name.Equals("Wrist_R")); - r.rightUpperLeg = GameObject.Find("Thigh_R").transform; - r.rightLowerLeg = GameObject.Find("Knee_R").transform; - r.rightFoot = GameObject.Find("Ankle_R").transform; + r.leftUpperLeg = list.Find(t => t.name.Equals("Thigh_L")); + r.leftLowerLeg = list.Find(t => t.name.Equals("Knee_L")); + r.leftFoot = list.Find(t => t.name.Equals("Ankle_L")); + + r.rightUpperLeg = list.Find(t => t.name.Equals("Thigh_R")); + r.rightLowerLeg = list.Find(t => t.name.Equals("Knee_R")); + r.rightFoot = list.Find(t => t.name.Equals("Ankle_R")); return r; } diff --git a/Assets/Resources/UI/d_stepok@2x.png b/Assets/Resources/UI/d_stepok@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6172eb0eef36236feb04699a13fdd946117e2e40 GIT binary patch literal 1501 zcmV<31tR*1P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91ET97b1ONa40RR91EC2ui0Q_#}qW}N}M@d9MR9Fe^nO|sIRUF69Ik|09 zS}bUj=$sF81-mstVLr%o;1D0m6rEZsz6g6t;vx+9vKKdH_#h59*Cv%cNnfm+jyd&7 zs1J%T6qF`~X$R9uw!oS)`FIh7xoDfsavTVKGTTyjt``3hHjKVS#_1~cseeNA!o z7H8r}aV&k!)OppL1`aPIp8;%IF&6P^(60^vc|a!%vGhmH_=-kG$Rr=m#Scm@Pu*x( zicM`&+Z2OhHRAC!*m!AQ|6jkazK4b;8Z~qy^cW^5`-Xxq{&LUTf7WZSZicD1-Gn7T zN=zkY-9**}4lO2L?N(;ZY*I{$ZOY8LYfor`(YV3@bJd#-bfnIi5=uPhHW6!pXz5~7 zE_Gsp`RN?M@=S=4>LsscNYFaF-mug$Vj!04PC7D7Z!o#aFJK(C^-`z~(&|0ETtrZ9 zHs6Sj3j8SodODpYw_XXa|!$B+9!k z_Ro@+bK5%3B?7)&jAo{FTam@YL#2}XTHm{sg7u8(U7nrc@)ps}+D*pU-)>@08GNv5 zdclMx`w|lk+cMc~V4>85o&hULI3$Z>nV@9_H$n7GGd?tV0)p=<#?o`9{WkS(50~<= zDRZrt_u6Y38(1=Sm#eWMMBpzAv6&1?b!E%Zi@m)A>2&K6E6sU}VHdUcb{28OZSi+YYqv4@8j6T3`3O@@H5p1@@K!;~XPw%-bDU)eJK zgDIzaIGa3%m%^TExyQZDW&`6>2di4+i%a%CUf&OxmRH7(pA%d>4_S%i7$#p04EF7~ zG&+UvIp-BxNW6hqDW}x?&SbNJk&(;ZZfn}|VlL$;8_(~%+qBO|(`SX?dqI1)Z>azA zi<^%AX6mUP$|VjU_ER923( zQh1P0<7MG%??HP5JofJVC}TqFdbfY}(s6H2@x`-alCvxeJkMKqT^B-N zQrGn-5+%=A<1|edIyJC5pfVEYWm%4e1#ukD9LL!qXGCGfT!Z{etGCER(=;PE+?cVG z091$A{%k}#Gi?KVTT(Bcz*!O50r4PA0p+^xKs<<(0BW#8umA56*a@ugN&pp}Vhhmg znKHql0}fK#wo4q9o(ILc@M+pzfZ_V7s%mQ$ID#|5wt_U!&r{e|bP4ia aycG__^?V~gNd?sa0000(); + BipedRagdollReferences r = BipedRagdollReferences.FromAvatar(animator); + BipedRagdollCreator.Options options = BipedRagdollCreator.AutodetectOptions(r); + + var ik = container.gameObject.AddComponent(); + ik.references.root = container.transform; + ik.references.pelvis = r.hips; + ik.references.spine = new Transform[] { r.spine, r.chest }; + ik.references.leftThigh = r.leftUpperLeg; + ik.references.leftCalf = r.leftLowerLeg; + ik.references.leftFoot = r.leftFoot; + ik.references.rightThigh = r.rightUpperLeg; + ik.references.rightCalf = r.rightLowerLeg; + ik.references.rightFoot = r.rightFoot; + ik.references.leftUpperArm = r.leftUpperArm; + ik.references.leftForearm = r.leftLowerArm; + ik.references.leftHand = r.leftHand; + ik.references.rightUpperArm = r.rightUpperArm; + ik.references.rightForearm = r.rightLowerArm; + ik.references.rightHand = r.rightHand; + ik.references.head = r.head; + + new List(ik.solvers.ikSolvers).ForEach(i => i.IKPositionWeight = 0); + new List(ik.solvers.limbs).ForEach(i => i.IKRotationWeight = 0); + ik.solvers.lookAt.IKPositionWeight = 1; + ik.solvers.lookAt.headWeight = 0.8f; + ik.solvers.lookAt.bodyWeight = 0.2f; + ik.solvers.lookAt.target = TrackTarget.transform; + IK = ik; + + BipedRagdollCreator.Create(r, options); + PuppetMaster = PuppetMaster.SetUp(container.transform, 8, 9); + PuppetMaster.FlattenHierarchy(); + PuppetMaster.pinWeight = 0.8f; + PuppetMaster.muscleWeight = 0.3f; + } + class MaterialHelper { public Material Mat; diff --git a/Assets/Scripts/UmaViewerBuilder.cs b/Assets/Scripts/UmaViewerBuilder.cs index 018146f..45a61ed 100644 --- a/Assets/Scripts/UmaViewerBuilder.cs +++ b/Assets/Scripts/UmaViewerBuilder.cs @@ -1849,7 +1849,15 @@ public class UmaViewerBuilder : MonoBehaviour { Destroy(t.gameObject); } - Destroy(CurrentUMAContainer.gameObject); + + if(CurrentUMAContainer.transform.parent && CurrentUMAContainer.transform.parent.name.Contains("Root")) + { + Destroy(CurrentUMAContainer.transform.parent.gameObject); + } + else + { + Destroy(CurrentUMAContainer.gameObject); + } } } diff --git a/Assets/Scripts/UmaViewerUI.cs b/Assets/Scripts/UmaViewerUI.cs index aa9da78..d217e8f 100644 --- a/Assets/Scripts/UmaViewerUI.cs +++ b/Assets/Scripts/UmaViewerUI.cs @@ -1323,41 +1323,4 @@ public class UmaViewerUI : MonoBehaviour TextureExporter.exportAllTexture(Builder.CurrentUMAContainer.gameObject); } } - - public void Debug() - { - var container = Builder.CurrentUMAContainer; - if (!container) return; - var animator = container.GetComponent(); - BipedRagdollReferences r = BipedRagdollReferences.FromAvatar(animator); - BipedRagdollCreator.Options options = BipedRagdollCreator.AutodetectOptions(r); - - var ik = container.gameObject.AddComponent(); - ik.references.root = container.transform; - ik.references.pelvis = r.hips; - ik.references.spine = new Transform[] { r.spine, r.chest }; - ik.references.leftThigh = r.leftUpperLeg; - ik.references.leftCalf = r.leftLowerLeg; - ik.references.leftFoot = r.leftFoot; - ik.references.rightThigh = r.rightUpperLeg; - ik.references.rightCalf = r.rightLowerLeg; - ik.references.rightFoot = r.rightFoot; - ik.references.leftUpperArm = r.leftUpperArm; - ik.references.leftForearm = r.leftLowerArm; - ik.references.leftHand = r.leftHand; - ik.references.rightUpperArm = r.rightUpperArm; - ik.references.rightForearm = r.rightLowerArm; - ik.references.rightHand = r.rightHand; - ik.references.head = r.head; - - new List(ik.solvers.ikSolvers).ForEach(i => i.IKPositionWeight = 0); - new List(ik.solvers.limbs).ForEach(i => i.IKRotationWeight = 0); - ik.solvers.lookAt.IKPositionWeight = 1; - ik.solvers.lookAt.headWeight = 0.8f; - ik.solvers.lookAt.bodyWeight = 0.2f; - ik.solvers.lookAt.target = Camera.main.transform; - //BipedRagdollCreator.Create(r, options); - //var master = PuppetMaster.SetUp(container.transform, 8, 9); - //master.FlattenHierarchy(); - } } diff --git a/Assets/Scripts/umamusume/Gallop/FaceDrivenKeyTarget.cs b/Assets/Scripts/umamusume/Gallop/FaceDrivenKeyTarget.cs index e833a7e..2a15558 100644 --- a/Assets/Scripts/umamusume/Gallop/FaceDrivenKeyTarget.cs +++ b/Assets/Scripts/umamusume/Gallop/FaceDrivenKeyTarget.cs @@ -361,6 +361,16 @@ namespace Gallop ApplyRotation(); } + public void ChangeMorphEye() + { + FacialResetEye(); + ProcessMorph(LeftEyeXrange); + ProcessMorph(LeftEyeYrange); + ProcessMorph(RightEyeXrange); + ProcessMorph(RightEyeYrange); + ApplyRotationEye(); + } + public void ClearMorph() { EarMorphs.ForEach(morph => morph.weight = 0); @@ -453,7 +463,7 @@ namespace Gallop public void FacialResetAll() { - if (Container.FaceOverrideData&& Container.FaceOverrideData.Enable) + if (Container.FaceOverrideData && Container.FaceOverrideData.Enable) { OverrideFace(Container.FaceOverrideData); } @@ -467,6 +477,17 @@ namespace Gallop ApplyRotation(); } + public void FacialResetEye() + { + if (Container.FaceOverrideData && Container.FaceOverrideData.Enable) + { + OverrideFace(Container.FaceOverrideData); + } + FacialReset(BaseLEyeMorph.trsArray); + FacialReset(BaseREyeMorph.trsArray); + ApplyRotationEye(); + } + public void FacialReset(List trsArrays) { foreach (TrsArray trs in trsArrays) @@ -500,6 +521,20 @@ namespace Gallop } } + public void ApplyRotationEye() + { + Action> applyRotation = delegate (List trsArray) + { + foreach (TrsArray trs in trsArray) + { + if(trs.transform) + trs.transform.localRotation = RotationConvert.fromMaya(RotationRecorder[trs.transform]); + } + }; + applyRotation.Invoke(BaseLEyeMorph.trsArray); + applyRotation.Invoke(BaseREyeMorph.trsArray); + } + public void ChangeMorphWeight(FacialMorph morph, float val) { Container.isAnimatorControl = false; @@ -520,7 +555,14 @@ namespace Gallop LeftEyeYrange.weight = ly; RightEyeXrange.weight = rx; RightEyeYrange.weight = ry; - ChangeMorph(); + if (Container.FaceOverrideData && Container.FaceOverrideData.Enable) + { + ChangeMorph(); + } + else + { + ChangeMorphEye(); + } } public void ProcessLocator() @@ -618,9 +660,9 @@ namespace Gallop changed = true; } - if (new List(arr.DstArray).Find(f=>f.Index == src) == null) - { - srcmorph.weight = 0; + if (new List(arr.DstArray).Find(f => f.Index == src) == null) + { + srcmorph.weight = 0; } } targetMorph.ForEach(a => a.Invoke()); diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 4e31a63..638badd 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -74,15 +74,6 @@ }, "url": "https://packages.unity.com" }, - "com.unity.services.core": { - "version": "1.0.1", - "depth": 1, - "source": "registry", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0" - }, - "url": "https://packages.unity.com" - }, "com.unity.test-framework": { "version": "1.1.31", "depth": 0, diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 495468b..3598ae5 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2020.3.24f1 -m_EditorVersionWithRevision: 2020.3.24f1 (79c78de19888) +m_EditorVersion: 2020.3.28f1 +m_EditorVersionWithRevision: 2020.3.28f1 (f5400f52e03f)