24 lines
1.6 KiB
C#
24 lines
1.6 KiB
C#
using UnityEngine; // 유니티 기능을 불러올거에요 -> UnityEngine을
|
|
|
|
public static class ProjectileMath // 정적 클래스를 선언할거에요 -> 수학 계산용 ProjectileMath를
|
|
{
|
|
public static Vector3 CalculateLobVelocity(Vector3 origin, Vector3 target, float angle) // 함수를 선언할거에요 -> 곡사 속도를 계산하는
|
|
{
|
|
Vector3 dir = target - origin; // 벡터를 계산할거에요 -> 방향과 거리를
|
|
float height = dir.y; // 값을 저장할거에요 -> 높이 차이를
|
|
dir.y = 0; // 값을 초기화할거에요 -> 수평 거리 계산용으로 y를 0으로
|
|
float dist = dir.magnitude; // 값을 계산할거에요 -> 수평 거리를
|
|
|
|
float a = angle * Mathf.Deg2Rad; // 값을 변환할거에요 -> 각도를 라디안으로
|
|
dir.y = dist * Mathf.Tan(a); // 값을 계산할거에요 -> 각도에 따른 높이를
|
|
dist += height / Mathf.Tan(a); // 값을 보정할거에요 -> 높이 차이에 따른 거리 보정을
|
|
|
|
float gravity = Physics.gravity.magnitude; // 값을 가져올거에요 -> 중력 가속도를
|
|
float velocitySq = (gravity * dist * dist) / (2 * Mathf.Pow(Mathf.Cos(a), 2) * (dist * Mathf.Tan(a) - height)); // 값을 계산할거에요 -> 필요한 속도의 제곱을
|
|
|
|
if (velocitySq <= 0) return Vector3.zero; // 조건이 맞으면 반환할거에요 -> 계산 불가시 0을
|
|
|
|
float velocity = Mathf.Sqrt(velocitySq); // 값을 계산할거에요 -> 제곱근을 구해 실제 속도를
|
|
return dir.normalized * velocity; // 값을 반환할거에요 -> 방향에 속도를 곱해서
|
|
}
|
|
} |