RopeJoint.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class RopeJoint : MonoBehaviour
  5. {
  6. public Rigidbody rb;
  7. public Rigidbody connectedBody;
  8. public float maxDistance;
  9. private void FixedUpdate()
  10. {
  11. if ((transform.position - connectedBody.transform.position).magnitude > maxDistance)
  12. {
  13. Vector3 dir = (connectedBody.transform.position - transform.position).normalized;
  14. float mag = (connectedBody.transform.position - transform.position).magnitude;
  15. float changeValue = mag - maxDistance;
  16. if (connectedBody.isKinematic && rb.isKinematic)
  17. {
  18. return;
  19. }
  20. else if (connectedBody.isKinematic)
  21. {
  22. transform.position += changeValue * dir;
  23. }
  24. else if (rb.isKinematic)
  25. {
  26. connectedBody.transform.position -= changeValue * dir;
  27. }
  28. else
  29. {
  30. transform.position += changeValue * rb.mass / (rb.mass + connectedBody.mass) * dir;
  31. connectedBody.transform.position -= changeValue * connectedBody.mass / (rb.mass + connectedBody.mass) * dir;
  32. }
  33. }
  34. }
  35. }