내일배움캠프 23일차 TIL, 분반과제 해설, 삼각함수

황오영·2024년 5월 17일
0

TIL

목록 보기
23/56
post-thumbnail

수준별 분반 과제

로켓발사 관련 로직중 문제 3번

구현사항 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 내적을 이용하여 소행성이 지금 시야각에 있는지를 체크하는 로직

  • 이것도 오랜만에 내적을 봐서 헷갈렸는데 내적을 이용하면 각도를 계산 할 수 있다.
  • 벡터의 내적의 경우 공식이 a · b = |a| |b| cosθ 이되는데 여기서 세타값을 계산하기 위해 |a| |b|값 만큼을 나눠주게 된다면 cosθ = a · b / (|a| |b|) 의 개념을 이용하는 방식이다.
// 목표물까지의 방향 계산 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;
}
  • 핵심 코드의 경우 중간에 cos을 구하는 내적함수 여기서 중요한건 위쪽에 쓴 a벡터와 b벡터의 크기를 1로 표준화를 시켜놨기 때문에 다순히 두 벡터를 내적하긴 한다면 cos값을 얻을 수 있다. 특히나 cos의 경우 우함수이기에 좌우 대칭함수라 음수각에서도 양수각이라 다른 보정이 필요없다고 한다.
  • 구현에서의 삼각함수는 많이 쓰는 개념이라 알아두면 좋다고 하신다. 잘 알아두는것이 좋고 Mathf.cos은 리소스를 많이 먹는 연산이라서 자주 사용하지 않는것이 좋다고한다. 초기화 할 때 한번이 좋다한다.

오늘의 회고

  • 생각보다 과제를 많이 못한것같아서 아쉽다. 마지막 내용은 알고는 있었는데 실제로 오랜만에 삼각함수를 적용하려니 조금 어려웠고 업적시스템 역시 코드한번 보니 방향성이 대충 이해는 가서 다음에 다시 한번 해 봐야겠다.
  • 팀프로젝트 역시 진행을 잘 되고 있는것같다. 팀원분들 코드 수정해주고 UI같은거 만드면서 같이 작업하니 확실히 제작난이도가 높은 과제가 아니다 보니 쉽게 할 수 있는것 같다. 필수 사항들 다 만들고 좀 더 많은 기능들을 넣어봐야겠다.
  • 금요일이라 공부하기 정~~말 힘들었다. 수요일날 쉬니까 피곤함이 두배가 된기분.. 앞으로 쉬는날이 없어져서 더 스파르타하게 달려야 할 것 같다.
profile
게임개발을 꿈꾸는 개발자

0개의 댓글