summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Test/FootIKTest.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-13 07:02:26 +0800
committerchai <chaifix@163.com>2020-10-13 07:02:26 +0800
commit58a47386a711746d17c5c66ac897a53f7a4aad4b (patch)
treee73d4906280793b5fb3070fe258333e0ad988115 /Assets/Scripts/Test/FootIKTest.cs
parent8b384dffa0d9c63c7a657c6e567c2ddefbf046cd (diff)
+samurai & ninja animations
Diffstat (limited to 'Assets/Scripts/Test/FootIKTest.cs')
-rw-r--r--Assets/Scripts/Test/FootIKTest.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/Assets/Scripts/Test/FootIKTest.cs b/Assets/Scripts/Test/FootIKTest.cs
new file mode 100644
index 00000000..f1711ade
--- /dev/null
+++ b/Assets/Scripts/Test/FootIKTest.cs
@@ -0,0 +1,69 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class FootIKTest : MonoBehaviour
+{
+
+ Animator anim;
+
+ public LayerMask layerMask;
+
+ [Range(0, 1f)]
+ public float DistanceToGround;
+
+ private void Start()
+ {
+
+ anim = GetComponent<Animator>();
+
+ }
+
+ private void OnAnimatorIK(int layerIndex)
+ {
+
+ if (anim)
+ {
+
+ anim.SetIKPositionWeight(AvatarIKGoal.LeftFoot, anim.GetFloat("IKLeftFootWeight"));
+ anim.SetIKRotationWeight(AvatarIKGoal.LeftFoot, anim.GetFloat("IKLeftFootWeight"));
+ anim.SetIKPositionWeight(AvatarIKGoal.RightFoot, anim.GetFloat("IKRightFootWeight"));
+ anim.SetIKRotationWeight(AvatarIKGoal.RightFoot, anim.GetFloat("IKRightFootWeight"));
+
+ // Left Foot
+ RaycastHit hit;
+ Ray ray = new Ray(anim.GetIKPosition(AvatarIKGoal.LeftFoot) + Vector3.up, Vector3.down);
+ if (Physics.Raycast(ray, out hit, DistanceToGround + 1f, layerMask))
+ {
+ if (hit.transform.tag == "Walkable")
+ {
+ Vector3 footOriginForward = anim.GetBoneTransform(HumanBodyBones.LeftFoot).forward;
+ Vector3 footPosition = hit.point;
+ footPosition.y += DistanceToGround;
+ anim.SetIKPosition(AvatarIKGoal.LeftFoot, footPosition);
+ anim.SetIKRotation(AvatarIKGoal.LeftFoot, Quaternion.LookRotation(footOriginForward - Vector3.Dot(footOriginForward, hit.normal) *(hit.normal), hit.normal));
+ }
+ }
+
+ // Right Foot
+ ray = new Ray(anim.GetIKPosition(AvatarIKGoal.RightFoot) + Vector3.up, Vector3.down);
+ if (Physics.Raycast(ray, out hit, DistanceToGround + 1f, layerMask))
+ {
+
+ if (hit.transform.tag == "Walkable")
+ {
+ Vector3 footOriginForward = anim.GetBoneTransform(HumanBodyBones.RightFoot).forward;
+ Vector3 footPosition = hit.point;
+ footPosition.y += DistanceToGround;
+ anim.SetIKPosition(AvatarIKGoal.RightFoot, footPosition);
+ anim.SetIKRotation(AvatarIKGoal.RightFoot, Quaternion.LookRotation(footOriginForward - Vector3.Dot(footOriginForward, hit.normal) * (hit.normal), hit.normal));
+ }
+
+ }
+
+
+ }
+
+ }
+
+} \ No newline at end of file