-
안녕하세요.
오늘 한 작업은 몬스터의 이동 구현과
플레이어의 공격 기능을 추가 작업 하였습니다.
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
먼저 코드를 살펴보겠습니다.

"MonsterMovement" 스크립트입니다.
선언된 변수는 다음과 같습니다.
특이사항으로는 obstacleLayer에는 Obstacle 레이어와 Player 레이어를 설정해 주었습니다.

다음은 OnEnable() 함수를 통해 오브젝트(몬스터)가 활성화될 때 현재
리스폰이 될 때 사용할 저장 포지션인 initialPosition과
이동될 때마다 저장될 현재 위치인 targetPosition입니다.
다음은 InvokeRepeating를 사용하여 함수를 실행시켜주었는데요.
인자로는 (함수명, 첫 시작 시간, 반복 시간)입니다.
정적 느낌을 없애기 위해 invokeTimer를 3~6초로 랜덤 하게 설정해 주었습니다.

다음은 실제 실행될 함수 MoveRandomDirection()입니다.
Vector2 Int 배열에 각 up, down, left, right를 설정해 주었으며
이를 랜덤으로 받아왔습니다.
다음은 if-else 조건으로 장애물이 있는지 판단을 하였는데요.
먼저 장애물이 있을 때 실행될 IsObstacleInDirection()부터 살펴보겠습니다.

이동 방향으로 레이를 발사하여 true, false를 나누어 주었습니다.
다음은 else입니다.

targetPosition(목표 위치)를 현재 방향을 더해주어 업데이트해주었습니다.
Vector2(0, 0) + Vector2.right = Vector2(1, 0) 이 됩니다.

이동은 코루틴을 활용하여 while문에서 MoveTowards로 해주었고
조건은 현재 포지션이 목표 위치가 아니라면 실행이 되게 해 주었습니다.
또한 이전에도 사용한 것과 같이 MoveTowards의 인자는
(현재 위치, 목표 위치, 스피드)입니다.

Hit()는 플레이어가 공격을 할 때 호출될 함수입니다.

애니메이션은 Die의 Falg로 해주었으며,
몬스터가 죽게 되면 CancelInvoke()로 모든 실행 중인 인보크 함수를 중지시킵니다.
다음은 연출을 위해서 Invoke 함수를 사용했는데
2초 후 실행될 AllReset()은
false였던 isDead 변수를 true로 변경시켜주고
죽음 애니메이션 실행 중인 몬스터 오브젝트를 비활성화시켜줍니다.
10초 후 실행될 ReviveAfterDelay() 함수는
애니메이션을 Move 상태로 변경시켜주며
초기 위치로 변경시켜 주어 활성화하여 리스폰되는 구현을 해보았습니다.

다음은 PlayerAttack 스크립트에 추가된 플레이어가 공격을 할 때 실행될 함수입니다.
레이캐스트의 인자를 살펴보자면
(현재 위치, 공격 방향, 거리, 몬스터 레이어)입니다.
현재 거리는

로 1로 되어있습니다.
예를 들어 공격 범위를 3으로 두어서
몬스터를 한꺼번에 죽는 효과를 구현할 수 있겠다는 생각을 했습니다 ㅎㅎ
코드를 이어서 보자면, hit 된 몬스터가 있을 경우 그 몬스터의 GetComponent로 접근하여
"MonsterMovemet" 스크립트를 가져와 주었고
이 안에 있는 Hit() 함수를 실행시켜 주었습니다.
마지막으로 몬스터가 이동을 할 때 플레이어 레이어를 감지하는 것과 같이
플레이어도 이동할 때 몬스터와 겹쳐지지 않기 위해 레이어를 추가하였습니다.

중간중간 오류 및 수정이 약간 빈번했던 작업이었는데요.
가장 크게 다시 한번 상기하게 된 점이.
코루틴은 오브젝트가 비활성화되면 실행이 안된다는 점입니다.
네 맞습니다. 현재 코드는 아닌 걸로 수정을 완료했습니다.또한 주석을 남기는 습관을 잘 들이자입니다.
분명 명확한 의도를 갖고 작성한 코드인데
작업을 다가 다른 작업을 하고 다시 와보면 '왜 이렇게 했지?'라고 생각이 들 때가 종종 있는데요
흐름상 따라가서 보면 이해는 할 수 있었지만 시간이 약간 든다는 문제? 아닌 문제가 있었습니다.
한 줄을 작성하더라도 주석 처리 작업을 잘해야겠습니다.
(그냥 보이고 생각나면 주석으로 간단히 작성해 놓는 게 좋지 않을까..?라고 조심스레 생각을 합니다)

감사합니다.

'유니티 프로젝트 > RPG-2D' 카테고리의 다른 글
Land Of Memories - Loading Image (0) 2024.11.18 Land Of Memories - Data Save - JSON (0) 2024.11.18 Land Of Memories - Npc (helper) & DOTween (0) 2024.11.15 Land Of Memories - Tile Map (2) (0) 2024.11.14 Land Of Memories - Tile Map (0) 2024.11.14