IKControl.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. [RequireComponent(typeof(Animator))]
  5. public class IKControl : MonoBehaviour
  6. {
  7. protected Animator animator;
  8. public bool ikActive = false;
  9. public Transform leftHandObj = null;
  10. public Transform rightHandObj = null;
  11. public Transform leftFootObj = null;
  12. public Transform rightFootObj = null;
  13. public Transform lookObj = null;
  14. void Start()
  15. {
  16. animator = GetComponent<Animator>();
  17. }
  18. void OnAnimatorIK()
  19. {
  20. if (animator)
  21. {
  22. if (ikActive)
  23. {
  24. if (lookObj != null)
  25. {
  26. animator.SetLookAtWeight(1);
  27. animator.SetLookAtPosition(lookObj.position);
  28. }
  29. if (leftHandObj != null)
  30. {
  31. animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
  32. animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);
  33. animator.SetIKPosition(AvatarIKGoal.LeftHand, leftHandObj.position);
  34. animator.SetIKRotation(AvatarIKGoal.LeftHand, leftHandObj.rotation);
  35. }
  36. if (rightHandObj != null)
  37. {
  38. animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1);
  39. animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);
  40. animator.SetIKPosition(AvatarIKGoal.RightHand, rightHandObj.position);
  41. animator.SetIKRotation(AvatarIKGoal.RightHand, rightHandObj.rotation);
  42. }
  43. if (leftFootObj != null)
  44. {
  45. animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 1);
  46. animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1);
  47. animator.SetIKPosition(AvatarIKGoal.LeftFoot, leftFootObj.position);
  48. animator.SetIKRotation(AvatarIKGoal.LeftFoot, leftFootObj.rotation);
  49. }
  50. if (rightFootObj != null)
  51. {
  52. animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 1);
  53. animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
  54. animator.SetIKPosition(AvatarIKGoal.RightFoot, rightFootObj.position);
  55. animator.SetIKRotation(AvatarIKGoal.RightFoot, rightFootObj.rotation);
  56. }
  57. }
  58. else
  59. {
  60. animator.SetLookAtWeight(0);
  61. animator.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0);
  62. animator.SetIKRotationWeight(AvatarIKGoal.LeftHand, 0);
  63. animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 0);
  64. animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 0);
  65. animator.SetIKPositionWeight(AvatarIKGoal.LeftFoot, 0);
  66. animator.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 0);
  67. animator.SetIKPositionWeight(AvatarIKGoal.RightFoot, 0);
  68. animator.SetIKRotationWeight(AvatarIKGoal.RightFoot, 0);
  69. }
  70. }
  71. }
  72. }