StrikForge 프로젝트/작업일지

StrikForge 9일차 - 오늘 한 일

editor66484 2026. 8. 18. 23:33

넥서스 전용 생성 구조 설계

넥서스 티어를 기준으로 하위 건물의 건설 및 업그레이드 가능 여부를 판단하기 위해, 팀별 넥서스 정보를 공통으로 조회할 수 있는 구조를 설계했다.

역할은 다음과 같이 구분했다.

  • SFGameMode
    • 데이터테이블을 이용한 넥서스 생성
    • 생성 위치와 팀 번호 초기화
  • SFGameState
    • 팀별 넥서스 포인터 저장
    • 다른 시스템에 넥서스 조회 기능 제공
  • SFGameInstance
    • 레벨 액터 포인터 저장에는 적합하지 않아 이번 기능에서 제외

SFGameState 넥서스 관리 기능 추가

[SFGameState.h/.cpp](C:/WorkProject/8th-Team8-Final-Project/Source/StrikeForge/Game/GameState/SFGameState.h)에 다음 기능을 추가했다.

RegisterNexus()
UnregisterNexus()
GetNexus()

TeamIndex를 Key로 사용하는 Map에 넥서스 포인터를 저장하도록 구성했다.

Team 0 → 플레이어 넥서스
Team 1 → 적 넥서스

같은 팀의 넥서스가 다시 등록될 경우 기존 포인터를 새로운 넥서스로 교체하며, 제거할 때는 현재 등록된 포인터와 전달받은 포인터가 같은지 검사하도록 구현했다.

SFGameMode 넥서스 전용 스폰 함수 추가

[SFGameMode.h/.cpp](C:/WorkProject/8th-Team8-Final-Project/Source/StrikeForge/Game/GameMode/SFGameMode.h)에 SpawnNexus()를 추가했다.

처리 흐름은 다음과 같다.

Nexus RowName 전달
→ Building DataTable 조회
→ BuildingClass 확인
→ SFNexusBuilding 상속 여부 검사
→ SpawnActorDeferred
→ SetRowName
→ CombatTargetComponent의 TeamIndex 설정
→ FinishSpawning
→ GameState에 넥서스 포인터 등록

SpawnActorDeferred()를 사용해 넥서스의 BeginPlay()가 실행되기 전에 RowName과 TeamIndex를 설정하도록 구성했다.

데이터테이블 연결 확인

프로젝트에서 다음 연결을 확인했다.

DT_Buildings
→ RowName: Nexus
→ BuildingClass: BP_NexusBuilding
→ 부모 클래스: SFNexusBuilding

BP_SFGameInstance에도 DT_Buildings가 연결된 것을 확인했다.

따라서 SpawnNexus()에는 BP 이름이 아닌 데이터테이블 RowName인 Nexus를 전달해야 한다.

에디터 테스트 구성

빈 테스트 맵에 Target Point를 배치하고, 레벨 블루프린트에서 다음과 같이 연결했다.

Event BeginPlay
→ Get Game Mode
→ Cast To SFGameMode
→ Spawn Nexus

생성 위치는 다음과 같이 전달했다.

PlayerNexusSpawnPoint
→ Get Actor Transform
→ Spawn Nexus의 Spawn Transform

사용한 입력값은 다음과 같다.

Nexus Row Name = Nexus
Team Index = 0
Spawn Transform = Target Point Transform

SpawnNexus() 반환값에 유효성 검사를 연결해 Nexus Spawn Success가 출력되는 것을 확인했다.

이를 통해 다음 과정은 정상 작동한다고 판단했다.

  • SFGameMode Cast 성공
  • 데이터테이블 조회 성공
  • 넥서스 클래스 검사 성공
  • 넥서스 액터 생성 성공
  • 넥서스 포인터 반환 성공