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; // 값을 반환할거에요 -> 방향에 속도를 곱해서 } }