-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPhysicsUtility.cs
More file actions
36 lines (29 loc) · 1.11 KB
/
PhysicsUtility.cs
File metadata and controls
36 lines (29 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//Author: João Azuaga
using System;
using UnityEngine;
namespace razveck.UnityUtility {
public static class PhysicsUtility {
public static int RaycastSorted(Ray ray, RaycastHit[] hits, float maxDistance, int layerMask) {
ClearRaycastArray(hits);
int hitCount = Physics.RaycastNonAlloc(ray, hits, maxDistance, layerMask);
SortRaycasts(hits, hitCount);
return hitCount;
}
private static void SortRaycasts(RaycastHit[] hits, int hitCount) {
Array.Sort(hits, 0, hitCount, RaycastHitDistanceComparer.Instance);
}
private static void ClearRaycastArray(RaycastHit[] hits) {
for(int i = 0; i < hits.Length; i++) {
hits[i] = default;
}
}
public static float AngleOfReachSteep(float gravity, float distance, float velocity) {
float factor = Mathf.Clamp((-gravity * distance) / (velocity * velocity), -1f, 1f);
return (Mathf.PI / 4) + 0.5f * Mathf.Acos(factor);
}
public static float AngleOfReachShallow(float gravity, float distance, float velocity) {
float factor = Mathf.Clamp((-gravity * distance) / (velocity * velocity), -1f, 1f);
return 0.5f * Mathf.Asin(factor);
}
}
}