StrikForge 프로젝트/트러블슈팅

StrikForge 9일차 - 트러블슈팅

editor66484 2026. 8. 18. 23:34

넥서스 포인터를 어디에서 관리할 것인가

처음에는 GameMode, GameState, GameInstance 중 넥서스 포인터를 어디에 저장할지 고민했다.

GameInstance는 맵 이동 후에도 유지되지만 넥서스 액터는 레벨이 변경되면 파괴된다. 따라서 GameInstance에 액터 포인터를 저장하면 유효하지 않은 참조가 남을 가능성이 있다.

최종적으로 역할을 다음과 같이 분리했다.

GameMode → 넥서스 생성
GameState → 현재 레벨의 팀별 넥서스 보관
GameInstance → 스테이지 진행 정보 등 영구 데이터 관리

별도의 스폰 액터 클래스 필요 여부

처음에는 넥서스 생성 위치를 관리하기 위한 전용 스폰 액터 클래스를 별도로 만들어야 하는지 고민했다.

현재 필요한 것은 단순한 생성 위치와 회전값이므로 별도 클래스를 추가하지 않고 언리얼의 Target Point를 사용하는 것으로 결정했다.

Target Point
→ Get Actor Transform
→ SpawnNexus

추후 팀별 스폰 위치, 생성 조건, 진영 정보 등 추가 데이터가 필요해질 경우 SF 접두어를 사용하는 전용 스폰 포인트 클래스를 고려할 수 있다.

Spawn Transform 컴파일 오류

초기 블루프린트에서는 Spawn Transform 입력이 연결되지 않아 다음 오류가 발생했다.

Spawn Transform pin must have an input wired into it

SpawnNexus()의 SpawnTransform이 참조형 입력이기 때문에 기본값만으로 실행할 수 없으며 반드시 Transform 노드를 연결해야 했다.

해결 방법:

Target Point
→ Get Actor Transform
→ Spawn Transform

BP 에셋과 데이터테이블 RowName 혼동

SpawnNexus()에 BP_NexusBuilding을 입력해야 하는지, Nexus를 입력해야 하는지 혼동할 수 있었다.

현재 함수는 BP 클래스를 직접 받는 구조가 아니라 데이터테이블의 RowName을 받는 구조다.

입력값: Nexus
→ DT_Buildings의 Nexus Row 검색
→ BuildingClass에서 BP_NexusBuilding 로드

따라서 Nexus Row Name에는 BP_NexusBuilding이 아닌 Nexus를 사용해야 한다.

생성 성공인데 넥서스가 보이지 않는 문제

화면에 Nexus Spawn Success가 출력됐지만 실제 넥서스 메시가 보이지 않는 문제가 발생했다.

이 결과로 다음 항목은 정상임을 확인했다.

GameMode Cast
데이터테이블 조회
클래스 로드
SpawnActorDeferred
넥서스 포인터 반환

따라서 문제 범위는 생성 이후의 상태와 시각 표현으로 좁혀졌다.

코드를 확인한 결과 SFBaseBuilding의 기본 SpawnMode가 다음과 같이 설정돼 있었다.

ESFBuildingSpawnMode::PlayerPlacedMode

하지만 넥서스는 플레이어가 위치를 지정해 건설하는 일반 건물이 아니라 게임 시작 시 자동으로 배치되는 완성 건물이다. 따라서 넥서스에는 다음 모드가 더 적절하다.

ViewPortPlacedMode

PlayerPlacedMode에서는 건물이 Preview 상태로 들어가고, ViewPortPlacedMode에서는 티어 활성화를 완료하고 Completed 상태로 진입한다.

우선 테스트 단계에서는 BP_NexusBuilding의 Class Defaults에서 Spawn Mode를 ViewPortPlacedMode로 설정해 확인하기로 했다.

장기적으로는 SFGameMode::SpawnNexus()가 넥서스 전용 생성 함수인 만큼, FinishSpawning() 전에 생성 모드를 명확하게 설정하는 통로가 필요하다. 현재 SpawnMode가 SFBaseBuilding의 private 변수이므로 건물 담당자와 Setter 제공 여부를 논의해야 한다.

남은 작업

  • BP_NexusBuilding의 SpawnMode 확인
  • 생성된 넥서스의 실제 Transform 확인
  • 플레이 중 World Outliner에서 생성된 넥서스 확인
  • 넥서스 파괴 또는 EndPlay() 시 UnregisterNexus() 연결
  • 넥서스 현재 티어 Getter 연결
  • GetNexusTier(TeamIndex) 구현
  • 하위 건물의 RequiredTier와 넥서스 티어 비교 기능 연결