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, 네트워크 등 확장 가능성이 많아 추후 발전 기대!