본문 바로가기
개발 (Game)/(2021) Unity RTS 포트폴리오

[Day 8-2] AI이동 구현 완료

by 진현개발일기 2021. 7. 20.

[2021. 07. 19, Mon]

 

오늘 머리를 많이 쓴 것 같다. 처음에 많이 애를 먹었지만 디버깅을 통해 안 되는 부분을 계속 잡아내려고 애를 썼고

최적화를 위해 여러 번 실행이 되는지 확인도 해봤다.

 

순서는 이렇다. 게임 매니저에서 전체적으로 AI국가들이 차례대로 자국의 모든 유닛을 움직이거나 공격한 뒤 턴을 넘긴다. 마지막 AI국가가 턴을 끝낸다면 자동으로 플레이어 턴이 된다.

 

[처음에 안되었던 부분]

1. 마지막 유닛이 이동을 마치면 자국의 이동 통제용 Bool값을 true로 만들어야 했는데, 처음에 다른 방식으로 하려다 미처 수정하지 못한, 실수로 유닛의 소유 국가를 static으로 뒀었다. 당연히 true로 안 바뀌어서 첫 번째 유닛이 이동을 하고 다음 번째 유닛에게 움직일 권한을 줘야 했는데 넘어가질 못했었다. 

(예) static 실수

2. 아까 Diplomacy.cs에서 볼 수 있었듯이 모든 AI 국가의 적국은 랜덤 확률로 지정이 된다.만약에 적이 0일 경우의 예외 처리를 안 해줘서 매 플레이가 일정하지 않게 계속 중간에 nationsIndex++가 실행되지 않았었다.

GameManager.cs 수정 부분
수정 후 QA 50번 성공 (문제 없음)

 

▼ 수정 후 EnemyAI.cs 

전체 모습
 AI Stats
Unity Methods
AI Methods

1,2. 각 타일들과 목표지점과의 거리들을 차례대로 먼저 SqrMagnitude로 비교를 하면서 내적을 이용하여 가장 정면 쪽에 있는 타일들을 골라내어 목표 지점으로 설정한다. 

(이 전에 밟았던 타일들은 저장을 해놓고 ②의 조건문에서 걸러낸다.)

(밟았던 타일들이 10개 이상이 되면 Update 함수에서 자동으로 리셋해준다.)

 

3. 목표 지점으로 이동 후에 이동 지점을 저장한다. 

4. 다음 순서의 유닛에게 바통 터치를 한다. 마지막 순서의 유닛이 이동을 마치면 해당 국가의 이동통제 bool을 true로 제어한다.

 

 

▼ 수정 후 GameManager.cs 

 

임시로 Space로 뒀고 나중에 UI를 추가하면 버튼 클릭 형식으로 수정할 것이다. 오늘 고생을 좀 많이 한 것 같다... 내일 열심히 또 AI 공격 추가 및 그 외의 것들도 추가해보자.

728x90