구현사항 1 삼각함수와 Slerp 이용하여 A와D키를 통해 궤도가 수정되는 로직구현
void Rotate(float inputX)
{
Quaterninon from = transform.localRotation
// 현재 회정방향을 가저오는 함수
(floatx, floaty) dir = inputX < 0 ? (-1,0 ): (1,0);
// inputx의 입력을 보고 A키> 반시계 D키 시계> 로 기준벡터 잡아주기
float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
//현재 각도계산 ( 현재 얼마나 회전했는지를 모르기 떄문)
Quaternion to = Quaternion.Euler(0, 0, angle - 90);
//기준치에 맞게 앞으로 얼마나 회전할지 설정
transform.localRotation = Quaternion.Slerp(from, to, ROTATIONSPEED);
//적용
}
구현사항 2 내적을 이용하여 소행성이 지금 시야각에 있는지를 체크하는 로직
// 목표물까지의 방향 계산 HIT의 경우 유니티 내의 레이캐스트 활용하여 오브젝트를 탐색한 방식
Vector2 directionToTarget = (hit.transform.position - transform.position).normalized;
// 'transform.up' 방향과의 내적을 이용해 시야각 검사
float cos = Vector2.Dot(directionToTarget, transform.up.normalized);
// 두 벡터의 길이의 곱 * cos(theta)
if (cos >= alertThreshold)
{
needAlert = true;
break;
}