[언리얼엔진] 범위 공격 - RadialDamage

2025. 5. 15. 21:25·언리얼 엔진/트러블슈팅

1. 개요

몬스터들이 칼을 휘두르는 공격은 ApplyDamage 혹은 ApplyPointDamage로 처리가 가능하다. 하지만 수류탄, 미사일처럼 폭파하는 로직들이 포함된 공격은 어떻게 구현해야 할까 ?

언리얼 엔진에는 **ApplyRadialDamage** 함수가 있다.

 


 

2. ApplyRadialDamage

UGameplayStatics::ApplyRadialDamage(
    GetWorld(), 
    ExplosionDamage,                   // 폭발 데미지
    GetActorLocation(),                // 폭발 시작점
    ExplosionRadius,                   // 폭발 반경
    UDamageType::StaticClass(),        // 데미지 타입
    TArray<AActor*>(),                 // 제외할 액터
    this,                              // 폭발을 발생시킨 주체
    GetController(),                   // 폭발을 발생시킨 컨트롤러
    false,                             // 범위에 따라 데미지를 다르게 적용하지 않을 건지
    ECollisionChannel::ECC_WorldStatic // WorldStatic 콜리전 채널 뒤에 숨은 경우 데미지 처리 x
    );

인자가 정말 많이 포함되어있다.

 


 

3. 최종 코드

void ABlowfish::Explosion()
{
	// 폭발 디버그 구체 그리기 (파란색, 1초 동안 표시)
	DrawDebugSphere(
		GetWorld(),
		GetActorLocation(),
		ExplosionRadius,
		32,                    // 세그먼트 수 (더 높이면 원형이 매끄러워짐)
		FColor::Red,           // 색상
		false,                 // 지속 여부 (true: 영구)
		1.0f                   // 표시 시간 (초)
	);

	TArray<FOverlapResult> Overlaps;
	FCollisionQueryParams Params;
	Params.AddIgnoredActor(this); // 자기 자신은 제외

	// 충돌 설정: Pawn 채널 탐지
	GetWorld()->OverlapMultiByChannel(
		Overlaps,
		GetActorLocation(),
		FQuat::Identity,
		ECC_Pawn,
		FCollisionShape::MakeSphere(ExplosionRadius),
		Params
	);

	// 충돌 범위 내에 있는 플레이어들 넉백
	for (const FOverlapResult& Result : Overlaps)
	{
		AUnderwaterCharacter* Player = Cast<AUnderwaterCharacter>(Result.GetActor());
		if (IsValid(Player))
		{
			float Power = LaunchPower * 5.0f;
			LaunchPlayer(Player, Power);
		}
	}
	
	// 복어 위치를 기준으로 ExplosionRadius 범위내에 있는 액터에게 ExplosionDamage를 가함
	// ECC_WorldStatic으로 프리셋이 설정된 액터에 가려진 경우 데미지를 받지 않음
	UGameplayStatics::ApplyRadialDamage(GetWorld(), ExplosionDamage, GetActorLocation(), ExplosionRadius,
		UDamageType::StaticClass(), TArray<AActor*>(), this, GetController(), false, ECollisionChannel::ECC_WorldStatic);
	
	Destroy(true);
}

 

충돌 반경에 대한 디버그 라인을 표시하고, 충돌 반경 내에 존재하는 플레이어에게 LaunchCharacter 및 데미지를 가하는 코드이다.

'언리얼 엔진 > 트러블슈팅' 카테고리의 다른 글

[언리얼엔진] Simulate Physics + Physics Asset  (0) 2025.05.20
[언리얼엔진] 렌더링 최적화 팁  (0) 2025.05.20
[언리얼엔진] 경로 활용 변수 할당  (0) 2025.05.13
[언리얼엔진] BeginPlay, Tick 이벤트 관련  (0) 2025.05.09
[언리얼엔진] Git Issue, PR Template 사용법  (0) 2025.05.07
'언리얼 엔진/트러블슈팅' 카테고리의 다른 글
  • [언리얼엔진] Simulate Physics + Physics Asset
  • [언리얼엔진] 렌더링 최적화 팁
  • [언리얼엔진] 경로 활용 변수 할당
  • [언리얼엔진] BeginPlay, Tick 이벤트 관련
Meoyoung's Development Logs
Meoyoung's Development Logs
내가 보려고 만든 블로그
  • Meoyoung's Development Logs
    이게뭐영
    Meoyoung's Development Logs
  • 전체
    오늘
    어제
    • 분류 전체보기 (229)
      • 게임잼 (3)
      • 언리얼 엔진 (53)
        • 꿀 Tip ! (7)
        • 트러블슈팅 (24)
        • 최적화 (0)
        • 캐릭터 (2)
        • VR (1)
        • Lighting (2)
        • 멀티스레드 (2)
        • 문자열 (0)
      • C++ (31)
        • 문법 정리 (8)
        • [서적] Fundamental C++ 프로그래밍 .. (5)
        • [서적] 이것이 C++이다 (11)
        • [서적] Effective C++ (7)
      • C# (1)
        • [서적] 이것이 C#이다 (1)
      • 코딩테스트 (26)
        • 프로그래머스 (6)
        • 알고리듬 (13)
        • 자료구조 (7)
      • 컴퓨터 과학 (27)
        • 운영체제 (11)
        • 데이터베이스 (0)
        • 디자인패턴 (0)
        • 자료구조 (5)
        • 네트워크 (0)
        • 컴퓨터구조 (11)
      • 면접준비 (0)
        • C++ (0)
        • 운영체제 (0)
        • 자료구조 (0)
      • 프로젝트 (25)
        • [팀프로젝트] The Fourth Descenda.. (5)
        • [개인프로젝트] FPS 구현 맛보기 (5)
        • GetOutOf (15)
      • 기타 (54)
        • [강의] 이득우의 언리얼 프로그래밍 Part1 (10)
        • [강의] 이득우의 언리얼 프로그래밍 Part3 (12)
        • [강의] 소울라이크 개발 A-Z (4)
        • [강의] Udemy-2D (5)
        • [서적] 인생 언리얼5 (4)
        • 스파르타코딩클럽 (15)
        • 객체지향프로그래밍 (2)
        • 컴퓨터회로 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    셸정렬
    알고리즘
    삽입정렬
    버블정렬
    선택정렬
    게임잼
    참가후기
    쉘정렬
    자료구조
    게임개발
    경북게임잼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Meoyoung's Development Logs
[언리얼엔진] 범위 공격 - RadialDamage
상단으로

티스토리툴바