본문 바로가기

Unity

[Unity] Mathf.Cos(), Mathf.Sin()을 이용한 무작위 경계 함수 만들기

728x90

경계하는 방향으로 무작위 RaycastHit2D를 발사하여 플레이어를 식별하면 플레이어에게 다가가는 적 기능 구현입니다.

 

변수 선언 내용
애니메이션 컨트롤러

적 휴먼 상태 애니메이션과 적 공격 애니메이션은 isAttack 변수에 의해서 전환된다.

 

Move 함수 코드

플레이어의 위치에서 적의 위치를 빼서 플레이어의 방향을 구해준다. 그리고 플레이어의 방향 백터를 정규화해주어 크기가 1인 백터로 만들어주고 여기에 moveSpeed를 곱해서 moveSpeed만큼의 힘을 가진 백터로 만들어준다. 

그리고 rigid.velocity = playerDirSpeed를 이용해서 속도를 바뀌 준다. 마지막으로 애니메이션 컨트롤러의 isAttack를 true로 바꿔준다.

 

Scan 함수 코드

랜덤 함수를 만들어 0~90 사이의 랜덤 한 숫자를 deg에 넣어준다. 그리고 rad = deg * Mathf.Deg2Rad를 이용하여 라디안 값으로 바뀐 deg를 rad에 넣어주고 그 라디안 값에 해당하는 코사인 함숫값과 사인 함숫값을 구한다.

 

그리고 RaycastHit2D를 만들어준다.

 

만약 플레이어가 raycastHit에 감지가 되었고 지금 현재 공격 중이 아니라면 Move() 함수를 호출하여 적이 플레이어에게 공격을 가할 수 있도록 한다.

 

마지막으로 Invoke 함수를 이용하여 0.5초에 한 번씩 호출되는 재귀 함수로 만들어준다.

 

2차 방정식

위 그림에서 빨간색 동그라미는 적의 위치이고, 초록색 그림은 플레이어의 위치이다.

 

위 그림은 deg값을 0~90으로 입력받고 부호를 전부 -로 바꿔준 이유이다.

RaycastHit2D를 만들 때 기준 위치가 적의 위치였고 게임의 진행 방향이 왼쪽에서 오른쪽이니 제3사분면이 있는 쪽에 플레이어가 존재한다. 따라서 제3사분면 쪽으로 RaycastHit2D를 만들어야 하는 것이다. 따라서 양수 값 0과 1을 반환받기 위해서 deg값을 0~90으로 설정했고 제3사분면으로 방향을 바꾸기 위해서 -를 곱해서 음수 값으로 바꿔준 것이다.

 

결과 화면

728x90