diff options
author | chai <chaifix@163.com> | 2020-10-13 10:33:05 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-13 10:33:05 +0800 |
commit | fc6de82e75310b4c007d80753a5f58e6692f4855 (patch) | |
tree | e6d8d9226595a6727d43f18a218f53533101a4e0 /Assets/Scripts/Test/FootIKTest.cs | |
parent | 8cd16fb71177bb61a9475284d944bc6aba30740e (diff) |
+misc
Diffstat (limited to 'Assets/Scripts/Test/FootIKTest.cs')
-rw-r--r-- | Assets/Scripts/Test/FootIKTest.cs | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/Assets/Scripts/Test/FootIKTest.cs b/Assets/Scripts/Test/FootIKTest.cs index f1711ade..5b939619 100644 --- a/Assets/Scripts/Test/FootIKTest.cs +++ b/Assets/Scripts/Test/FootIKTest.cs @@ -1,69 +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)); - } - - } - - - } - - } - +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 |