diff options
author | chai <chaifix@163.com> | 2020-10-13 07:02:26 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-13 07:02:26 +0800 |
commit | 58a47386a711746d17c5c66ac897a53f7a4aad4b (patch) | |
tree | e73d4906280793b5fb3070fe258333e0ad988115 /Assets/Scripts/Test/FootIKTest.cs | |
parent | 8b384dffa0d9c63c7a657c6e567c2ddefbf046cd (diff) |
+samurai & ninja animations
Diffstat (limited to 'Assets/Scripts/Test/FootIKTest.cs')
-rw-r--r-- | Assets/Scripts/Test/FootIKTest.cs | 69 |
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 |