MATH_UTILS.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using UnityEngine;
  2. namespace HQFPSWeapons
  3. {
  4. public class MATH_UTILS
  5. {
  6. public static Vector3[] GetArchVertices(Vector3 startDirection, Vector3 endDirection, float radius, int vertexCount, Transform relativeTo = null)
  7. {
  8. startDirection.Normalize();
  9. endDirection.Normalize();
  10. vertexCount = Mathf.Clamp(vertexCount, 3, 100);
  11. Vector3[] vertices = new Vector3[vertexCount];
  12. float deltaRadians = Vector3.Angle(startDirection, endDirection) * Mathf.Deg2Rad / vertexCount;
  13. for(int i = 0;i < vertexCount;i ++)
  14. {
  15. vertices[i] = Vector3.RotateTowards(startDirection, endDirection, deltaRadians * i, 0f);
  16. if(relativeTo != null)
  17. vertices[i] = relativeTo.TransformVector(vertices[i]);
  18. }
  19. return vertices;
  20. }
  21. public static float GetBezier(float time)
  22. {
  23. time = Mathf.Clamp01(time);
  24. return (time * time) * (3f - 2 * time);
  25. }
  26. public static Vector3 GetNaNSafeVector3(Vector3 vector3)
  27. {
  28. if(float.IsNaN(vector3.x))
  29. vector3.x = 0f;
  30. if(float.IsNaN(vector3.y))
  31. vector3.y = 0f;
  32. if(float.IsNaN(vector3.z))
  33. vector3.z = 0f;
  34. return vector3;
  35. }
  36. private MATH_UTILS() {}
  37. }
  38. }