[Unity AI] 가까운 타일만 따라가던 Bot이 전황을 읽게 만들기
Paint War의 봇이 가까운 타일만 향하도록 하면 이동은 할 수 있어도 영토 경쟁이라는 게임 규칙을 제대로 활용하지 못합니다. 그래서 현재 점수와 위험 상황을 먼저 판단하고, 그 결과에 따라 목표 타일을 선택하도록 구성했습니다.
1. 타일 하나의 가치보다 현재 목표가 먼저입니다
가까운 중립 타일을 선택하는 행동은 초반 확장에 적절할 수 있습니다. 하지만 본진과 연결된 길이 끊겼거나, 상대가 승리 조건에 가까워졌는데도 같은 방식으로 움직인다면 게임 상황에 대응하지 못합니다.
BotTerritoryAnalyzer에서는 봇의 연결 영토 수, 고립 타일 수, 가장 앞선 상대의 영토 수, 현재 폭탄 위험을 BotTerritorySnapshot에 담습니다.
BotTerritorySnapshot result = new BotTerritorySnapshot
{
OwnConnected = map.CountConnectedTerritory(owner),
OwnIsolated = map.CountIsolatedTerritory(owner),
LeadingEnemy = PaintOwner.Neutral,
UnderImmediateDanger = BombMine.IsEnemyBlastDangerTile(current, owner)
};
중요한 점은 여기서 봇이 별도로 BFS를 다시 돌리는 것이 아니라, TilePaintManager가 이미 계산한 공통 영토 결과를 읽는다는 것입니다.
2. 상태에 우선순위를 부여하기
BotGoalEvaluator에서는 위험 회피와 영토 복구를 우선하고, 그다음에 승리와 공격 여부를 판단합니다.
if (snapshot.UnderImmediateDanger) return BotGoal.EvadeDanger;
if (snapshot.OwnIsolated > 0) return BotGoal.RepairTerritory;
if (snapshot.OwnConnected >= config.finishVictoryCount)
return BotGoal.FinishVictory;
if (snapshot.BestEnemyConnected >= config.victoryUrgentCount)
return BotGoal.DenyEnemyVictory;
return BotGoal.ExpandTerritory;
코드는 일부 조건을 생략한 발췌입니다. 실제로는 점수 차이, 견제 시작 기준도 확인합니다. 기준 숫자는 BotTerritoryAIConfig에 두었기 때문에 봇의 공격성이나 위험 반응을 별도의 코드 수정 없이 조정할 수 있습니다.
3. 목표에 따라 타일을 찾는 방법도 달라집니다
BotBrain.BuildPlan()은 목표를 계산한 다음에 다른 탐색을 수행합니다. 위험 상황이면 TryFindSafeTile(), 연결이 끊겼으면 TryFindRepairBridge(), 공격 상황이면 TrySelectEnemyConnection(), 평상시에는 TryFindConnectedFrontier()를 호출합니다.
특히 TryFindRepairBridge()는 후보 타일 주변에 본진과 연결된 아군 타일과 고립된 아군 타일이 함께 있는지 검사합니다. 단순히 소유하지 않은 칸을 다시 칠하는 것이 아니라, 끊어진 영토 사이의 연결점을 찾으려는 것입니다.
또 다른 봇들이 같은 상대만 쫓지 않도록 BotOpponentCoordinator의 예약 정보를 사용합니다. 목표 대상은 잠시 유지하고, 시간이 지나거나 조건이 바뀌면 다시 평가합니다.
4. 후보를 점수화하는 역할은 따로 두기
BotTileScorer는 후보 타일의 가치를 계산합니다. 파밍 단계에서는 구역 경계로부터의 거리와 적 접근을 고려하고, 배틀 단계에서는 적 타일의 가치와 다른 봇과의 거리를 반영합니다.
이렇게 후보를 구하는 과정과 점수를 매기는 과정을 나누면 행동 이유를 확인하기 쉬워집니다. 공격해야 하는데 계속 중립 지역으로 향한다면 목표 판단부터 확인하고, 목표는 맞지만 나쁜 위치를 고른다면 후보 점수 쪽을 확인할 수 있습니다.정리
이번 봇 AI는 영토 상태 분석 → 행동 목표 결정 → 목표 타일 선택 → 이동·스킬 계획 순서로 구성했습니다. 연결 판정 결과를 공통으로 사용하기 때문에 플레이어의 영토 점수와 봇의 상황 인식이 서로 다른 기준을 갖지 않도록 했습니다. 다만 전략적으로 얼마나 좋은 선택을 하는지는 실제 대전 로그와 플레이 테스트로 추가 검증해야 합니다.