VRIKPlatformController.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using UnityEngine;
  2. using System.Collections;
  3. using RootMotion.FinalIK;
  4. namespace RootMotion.Demos
  5. {
  6. public class VRIKPlatformController : MonoBehaviour
  7. {
  8. public VRIK ik;
  9. public Transform trackingSpace;
  10. public Transform platform;
  11. public bool moveToPlatform = true;
  12. private Transform lastPlatform;
  13. private Vector3 lastPosition;
  14. private Quaternion lastRotation = Quaternion.identity;
  15. void LateUpdate()
  16. {
  17. if (platform != lastPlatform)
  18. {
  19. if (platform != null)
  20. {
  21. // Moves the character to the position/rotation of the new platform
  22. if (moveToPlatform)
  23. {
  24. lastPosition = ik.transform.position;
  25. lastRotation = ik.transform.rotation;
  26. ik.transform.position = platform.position;
  27. ik.transform.rotation = platform.rotation;
  28. trackingSpace.position = platform.position;
  29. trackingSpace.rotation = platform.rotation;
  30. ik.solver.AddPlatformMotion(platform.position - lastPosition, platform.rotation * Quaternion.Inverse(lastRotation), platform.position);
  31. }
  32. lastPosition = platform.position;
  33. lastRotation = platform.rotation;
  34. }
  35. ik.transform.parent = platform;
  36. trackingSpace.parent = platform;
  37. lastPlatform = platform;
  38. }
  39. if (platform != null)
  40. {
  41. // Adding the motion of this Transform to VRIK
  42. ik.solver.AddPlatformMotion(platform.position - lastPosition, platform.rotation * Quaternion.Inverse(lastRotation), platform.position);
  43. lastRotation = platform.rotation;
  44. lastPosition = platform.position;
  45. }
  46. }
  47. }
  48. }