[2021. 07. 18, Sun]
[게임 매니저]
게임 매니저에 추가 기능이 있다.
턴을 넘길 때마다 유닛들의 스텟(공격 횟수, 이동 횟수)이 초기화되어야 한다. 이를 한 번에 실행시키기 위해 Action을 활용하였다.
[외교관계]
ref. https://assetstore.unity.com/packages/templates/systems/rts-toolkit-free-30247
위의 RTS Toolkit 에셋을 보면서 공부하고 참조하였다.
(말 그대로 참조이다. 이 툴킷의 스크립트 중 원리를 완전히 이해한 부분만 응용하면서 내 입맛대로 바꾸면서 사용하였다.)
일단 외교 관계의 상태를 나타내주기 위해 enum을 만들었다.
1. 아무관계아님
2. 동맹
3. 적대관계이다.
[▼ Diplomacy.cs, [진현, 2021. 07. 18]
원리는 이렇다. WorldBuilng의 Start함수에서 Diplomacy.ties.addNationTies()를 하게 된다.
-------------------------------------------------------
addNationTies() 구조
1. 첫 번째 for문
기존에 relations에 존재하는 국가들의 각각이 보유한 relations[i] 외교 관계에서 새로운 나라를 추가하는 것이다. 기본 값은 Nothing이다.
2. relations.Add(new List <NationRelations>());
새로운 국가의 다른 나라 간의 외교관계 리스트를 생성한다.
3. 두 번째 for문
새로운 국가의 외교관계 리스트 안에 각각의 다른 나라들 간의 관계를 생성해준다.
-------------------------------------------------------
그러나, 이 구조에는 큰 단점이 있다.
이런 구조는 모두 전쟁을 하는 함수, 모두 평화를 지키는 함수 이 두가지 밖에 할수없다.
(왜냐하면, 내가 전쟁을 선포해야하는 대상 국가가 몇 번째 인덱스인지 정확하게 알 수가 없다.)
내가 원하는 것은 그게 아니다. 각각의 나라가 전쟁중인 국가가 있고, 동맹인 국가가 있는 것이다. 그래서 다시 한 번
수정해봤다.
[수정 후 Diplomacy.cs [진현, 2021. 07. 18]]
addNationTies의 함수는 차례대로 함수에 들어오는 국가들의 오브젝을 인자로 받는다.
딕셔너리를 활용하여 각각의 국가들은 다른 나라와 어떤 관계를 가지고있는지의 리스트를 외부에서 참조할수있다.
저 리스트를 받아서 AI 스크립트에다가 현재 해당 국가의 '적국 리스트'를 받아서 랜덤으로 유닛을 보낼 수 있을 것 같다. (AI간의 싸움 가능)
이제 이를 활용하면서 유닛 AI 스크립트를 짜봐야겠다.
'개발 (Game) > (2021) Unity RTS 포트폴리오' 카테고리의 다른 글
[Day 8-2] AI이동 구현 완료 (0) | 2021.07.20 |
---|---|
[Day8-1] 외교 관계 랜덤 적대 관계 형성 (0) | 2021.07.19 |
[Day 6] 전체 리팩토링 및 게임 매니저 구현 (0) | 2021.07.17 |
[Day 5-2] 유닛 세 종류 모두 구현 완료 및 공격 시스템 수정 (0) | 2021.07.16 |
[Day 5-1] 확장메서드 수정 + 미니맵 구현 (0) | 2021.07.16 |