본문 바로가기

Unity

[Unity] RaycastHit2D, Invoke()를 사용한 생각하는 적 만들기

728x90

Invoke()는 지정된 시간만큼 해당 함수 시작 시간을 지연시켜주는 함수이다.

CancelInvoke() 해당 함수의 Invoke를 중지시킨다.

 

애니메이션 컨트롤러

 

변수 선언 내용

nextMove는 다음 움직임을 표현하면서 애니메이터의 애니메이션을 정해주는 변수이다.

sprite는 적이 움직일 때 바라보는 방향을 바꿔주기 위해서 선언한 것이다.

rigid는 적을 움직이게 하기 위해 선언한 것이다.

anim은 적이 움직일 때 애니메이션을 바꿔주기 위해서 선언한 것이다.

 

Start 함수 코드

rigid, anim, sprite는 모두 초기화를 위해 작성되었다.

Invoke("Move", 1f)는 적이 생성된 후에 Move라는 이름을 가진 함수를 1초 뒤에 실행시키라는 것을 나타낸다.

 

FixedUpdate 함수 코드

Think 함수를 실행시켜준다.

 

Think 함수 코드

적의 이동 속도를 nextMove만큼으로 선언해준다.

그리고 적의 위치에서 0.5만큼 앞에 위치한 좌표를 구한다.

구한 좌표에서 아래쪽 방향으로 0.5만큼의 길이를 가진 rayHit를 생성하고 Ground라는 레이어를 가진 오브젝트를 가져온다.

 

만약 rayHit에 감지되는 오브젝트가 없다면 Turn함수를 실행시켜 적의 방향을 바꿔준다.

 

Turn 함수 코드

nextMove에 -1을 곱하여 다음 움직임을 다음 방향으로 바꿔주고, 적의 스프라이트를 nextMove가 1이라면 true로 nextMove가 1이 아니라면 false로 바꿔준다. 그리고 CancelInvoke("Move")를 사용하여 진행되고 있는 Invoke를 중지시켜주고, 다시 Invoke("Move", 2f)를 사용하여 새로운 Invoke를 만들어준다.

 

Move 함수 코드

nextMove를 -1, 0, 1 중에 하나를 랜덤으로 선택하여 바꿔준다.

그리고 애니메이터의 walkSpeed라는 int형 변수에 인자로 넘겨준다.

 

만약 nextMove가 0이 아니라면 움직이고 있다는 것을 나타내므로 스프라이트를 뒤집어준다.

그리고 Invoke 함수를 사용하여 2초 뒤에 다시 Move()가 호출되도록 한다.

 

결과 화면

 

728x90