본문 바로가기

Unity/로봇 체스 개발 일지

[Unity] 로봇 움직임 구현(3) : MonsterMovement 몬스터 동작 알고리즘

요약

몬스터 동작을 구현하는 데 필요한 조건을 확인하고 알고리즘을 작성하였다. 알고리즘을 작성하기 전 고려 사항으로 로봇을 겹치지 않게 하려고 미리 도착하는 목적지를 설정한다. 또한 목적지를 찾지 못하는 경우 플레이어와 가장 가까운 곳을 찾아 목적지로 설정한다.


몬스터 동작

조건

1. 로봇 체스에서 몬스터는 대각선으로 이동, 공격을 할수 없다.

2. 로봇을 서로 겹칠 수 없다.

 

알고리즘

1. 몬스터는 플레이어를 목적지로 하여 길을 찾는다.

2. 목적지를 찾으면 몬스터의 이동 가능 거리만큼 간다.

3. 목적지를 찾지 못한 경우 플레이어의 가장 가까운 위치에 이동한다.

4. 가장 가까운 위치가 현 위치이면 가만히 있는다.

5. 가장 가까운 위치를 찾지 못하는 경우 가만히 있는다.


알고리즘 작성 시 고려 사항

로봇을 겹치지 않는 방법

몬스터가 플레이어에게 가장 가까운 곳을 가기 위해 두 몬스터가 겹치는 목적지를 선택한다. 

이를 방지하기 위해 배열 Map2DA*알고리즘으로 도출한 곳에 미리 몬스터가 있다고 작성한다.

해당 방식이 게임 규칙 설정 : GameManager에서 나온 가까운 몬스터에게 권한을 먼저 부여하는 방법으로 이미 해결된 것 같지만, 미리 가는 곳을 지정하지 않고 도착한 후에 배열 Map2D에 알리게 된다면 다음 권한을 받은 몬스터가 같은 목적지를 선택하는 경우 겹치게 된다.

 

목적지를 찾지 못한 경우 플레이어의 가장 가까운 위치에 이동 방법

 

몬스터가 플레이어를 못 찾을 때에 주위에 이동 가능한 포인트 들이 생긴다. 해당 포인트는 1개라도 생성될 때까지 x3, 5x5.. 처럼 점점 늘어나며 생성된 포인트 중 플레이어와 가장 가까운 곳을 목적지로 선택하여 향하게 된다.

 

대각선에 있는경우 플레이어와 겹치지 않는 방법

대각선에서는 몬스터가 공격을 하지 않는다. 그래서 몬스터는 목적지인 플레이어게 갈려고 하고 이는 겹치게 된다. 이를 방지하기 위해 3x3에서 대각선인 경우 가장 가까운 곳으로 이동하면 자동으로 아래로 내려간다.