넥서스 전용 생성 구조 설계
넥서스 티어를 기준으로 하위 건물의 건설 및 업그레이드 가능 여부를 판단하기 위해, 팀별 넥서스 정보를 공통으로 조회할 수 있는 구조를 설계했다.
역할은 다음과 같이 구분했다.
- 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 성공
- 데이터테이블 조회 성공
- 넥서스 클래스 검사 성공
- 넥서스 액터 생성 성공
- 넥서스 포인터 반환 성공
'StrikForge 프로젝트 > 작업일지' 카테고리의 다른 글
| StrikForge 11일차 - 오늘 한 일 (0) | 2026.08.21 |
|---|---|
| StrikForge 10일차 - 오늘 한 일 (0) | 2026.08.20 |
| StrikForge 8일차 - 오늘 한 일 (0) | 2026.08.14 |
| StrikForge 7일차 - 오늘 한 일 (0) | 2026.08.12 |
| StrikForge 6일차 - 오늘 한 일 (0) | 2026.08.12 |