UE5 부트캠프(TIL)
[TIL]Intelligence팀 거점(Capture Point) 시스템 구현
Yellow Kirin
2025. 8. 1. 21:28
1. 거점 시스템 전체 구조
- ATCapturePoint 클래스를 만들어 각 거점을 액터로 배치
- UBoxComponent로 플레이어의 진입/이탈 오버랩 감지
- bPlayerInArea, CapturePercent 변수로 점령 상태 실시간 관리
2. Tick 함수에서 점령률 제어
- 플레이어가 진입하면
bPlayerInArea = true
- Tick에서
bPlayerInArea
가 true면CapturePercent
증가, false면 감소 또는 유지 - 점령률이 100%에 도달하면
OnCaptured()
또는NotifyWall()
호출
3. 벽(문)과의 연동
- TArray<ATMovingWall*> LinkedWalls로 여러 벽과 연결
- 점령률이 100%가 되면
for
문으로LinkedWalls
의 모든OpenWall()
함수 호출 - 실제 움직임은 벽(문) 액터 내부
OpenWall()
함수에서SetActorLocation()
등으로 구현
4. 시행착오 및 팁
- 배열 접근은 반드시
for (auto Wall : LinkedWalls)
로 순회 (LinkedWalls->OpenWall()
는 X) - Tick/Overlap/타이머/OnDestroyed 등 비동기 처리 순서 신경쓰기
- 점령률 감소, 점령 해제, 팀별 점령 등 다양한 확장성 고려
5. 예시 코드
// ATCapturePoint.cpp (Tick 함수)
if (bPlayerInArea) {
CapturePercent += DeltaTime * CaptureSpeed;
CapturePercent = FMath::Clamp(CapturePercent, 0.f, 100.f);
if (CapturePercent >= 100.f && !bCaptured) {
bCaptured = true;
NotifyWall();
}
} else {
// 필요시 CapturePercent 감소
}
// NotifyWall()
void ATCapturePoint::NotifyWall() {
for (ATMovingWall* Wall : LinkedWalls) {
if (Wall) Wall->OpenWall();
}
}
6. 오늘 느낀 점
- 거점 시스템은 액터, 이벤트, 변수 상태 관리 등 언리얼 C++ 기초를 종합적으로 익힐 수 있는 과제
- 실시간 Tick 활용, 배열 연동, 액터 간 상호작용의 중요성 체감
- 데칼, UI, 네트워크 등 확장 가능성이 많아 추후 발전 기대!