[Unity] 게임 규칙 설정 : GameManager
요약
게임이 원활하게 돌아가기 위해 게임의 규칙을 설정하고 관리하게 하는 코드를 작성하였다.
코드는 몬스터 사망 처리, 플레그 회수, 턴 관리를 담당하는 알고리즘으로 이루어져 있다.
특히 게임 규칙에서 중요한 것은 플레이어 턴에서 몬스터 턴으로 넘어갈 때 몬스터 중에서 플레이어와 가장 가까운 몬스터 먼저 움직일 권한이 주어진다. 이렇게 되지 않는다면 몬스터가 올바른 동작을 하지 않게 된다.
게임 규칙
플레이어가 움직일 수 있는 턴, 몬스터가 움직일 수 있는 턴이 존재한다.
플레이어와 몬스터는 각각 공격 1번 이동 1번을 할 수 있다.
플레이어 턴은 몬스터의 동작이 끝나면 올리는 플래그가 모두 올라갈 때 돌아온다.
몬스터 턴은 플레이어가 턴 종료 버튼을 누를 시 돌아온다.
몬스터 턴에는 플레이어와 가장 가까운 몬스터에게 권한을 부여한다.
동작을 마친 몬스터는 다음으로 플레이어와 가까운 몬스터에게 권한을 넘긴다.
가장 가까운 몬스터에게 권한을 먼저 부여하는 이유
*몬스터(빨강색), 플레이어(파랑색)
다음과 같은 상황에서 몬스터의 올바른 동작은 아래와 같을 것이다.
하지만 이는 가장 가까운 몬스터가 우선권을 가졌을 때의 경우이고 만약 아니면
이러한 식으로 이상하게 움직이는 경우가 발생한다.
GameManager.cs
public class GameManager : MonoBehaviour
{
... 생략 ...
// 몬스터의 움직임의 규칙을 담당하는 알고리즘
if (monsterTurn && SummonedMonster.Count > 0)
{
ButtonLock = true;
// 몬스터가 N번 행동 할수 있도록 함
if (monsterTurnCount < 2)
{
if (CheckMonsterAuthority())
{
if (CheckMonsterFlag())
{
MonsterDeathProcessing();
ResetMonsterFlags();
FindNearbyMonsters();
SummonedMonsterAuthorityCount = 0;
monsterTurnCount++;
}
}
}
}
... 생략 ...
}
CheckMonsterAuthority(): 몬스터의 동작 권한이 마지막 몬스터 까지 가면 True
CheckMonsterFlag(): 모든 몬스터의 플래그가 올라가면 True
MonsterDeathProcessing(): 몬스터가 죽으면 사망 처리
ResetMonsterFlags(): 몬스터 플래그 재정렬
FindNearbyMonsters(): 플레이어와 몬스터 거리 확인 후 가까운 몬스터에게 우선으로 움직이는 권한 부여