Game Dev Study Log

by ricale

취미로 하는 게임 개발 공부

강의 58,59,60강 수강

강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding

58. Enemy AI Basic (17:11)

UnitManager 스크립트를 추가해서 해당 스크립트에서 모든 Unit 을 갖고 있도록 구현.

  • 이렇게 되면 UnitManager 는 모든 Unit 의 생성보다 빠르게 초기화되어 Unit 의 생성 이벤트를 들을 수 있어야 하므로, Edit - Project Settings - Script Execution Order 에서 순서 조정이 필요하다.

screenshot

이후 예전에 만들어 두었던, 턴이 돌아오면 일정 시간 이후 NextTurn 만 하게 작성해두었던 EnemyAI 스크립트를 수정한다.

  • 턴이 왔을 때 UnitManager 로부터 모든 적 Unit 목록을 가져온다.
  • Unit 목록을 순회하면서 액션이 가능한 Unit 들의 액션을 실행한다.
  • 모든 액션이 끝나면 NextTurn 으로 넘긴다.

이번 강의에서는 적 UnitSpinAction 만 하게 구현했는데, 다음 강의에서 개선할 것으로 보인다.

59. Enemy AI Complex (18:22)

각 액션에 점수를 계산할 수 있는 로직을 넣고, 적 Unit 액션 실행 전 실행 가능한 액션들의 점수를 비교해 점수가 가장 높은 액션을 실행하게끔 구현.

점수를 관리하는 클래스 (지금 시점에서는 struct 로 작성해도 문제 없어보이는 클래스) EnemyAIAction 클래스를 만들어서 사용한다. 해당 클래스에는 gridPosition 과 점수 필드가 존재하는데, 이는 같은 액션이라 할지라도 어느 지점으로의 액션인지에 따라 점수가 다를 수 있기 때문.

  • 예를 들어 moveAction 의 경우 적에게 가까이 가는 것이 멀리 가는 것 보다 점수가 높을 것이고, shootAction 의 경우 HP 가 적은 적을 노리는 게 점수가 높을 수 있다.

액션 관련한 비효율적인 코드가 몇몇 눈에 띄는데, 후속 강의에서 개선할 것으로 보인다.

60. Intro - Pathfinding (01:01)

Pathfinding 섹션에 대한 소개.

맵에 지나다닐 수 없는 지형지물 (예, 벽) 을 만들고, 그런 맵 위에서 적에게 접근할 수 있는 최적의 경로를 찾는 알고리즘을 적용한다고 한다.

맵을 구현하기 위해 GridSystem 에 대한 리팩토링이 필요하고, 이를 위한 c# generic 에 대해서도 간단히 알려준다고 한다.