SweepMultiByChannel() 의 시각적 다이어그램은 아래와 같다.


시작 위치부터 끝 지점까지 특정 Collision 도형을 가지고 범위내에 Hit 되는 모든 것(Multi)들의 값들을 얻어 올 수 있다.
SweepMultiByChannel 의 원본은 아래와 같다.
bool UWorld::SweepMultiByChannel(
TArray<struct FHitResult>& OutHits, // 함수 실행 후 여기에 모든 충돌 정보가 저장됨
const FVector& Start,
const FVector& End,
const FQuat& Rot,
ECollisionChannel TraceChannel,
const FCollisionShape& CollisionShape,
const FCollisionQueryParams& Params,
const FCollisionResponseParams& ResponseParam
) const
위 파라미터들을 참고하여 아래처럼 사용할 수 있다.
TArray<FHitResult> HitResults; // 히트될 저장 값들
FCollisionQueryParams Params(NAME_None, false, this);
bool bResult = GetWorld()->SweepMultiByChannel(
HitResults,
GetActorLocation(),
GetActorLocation() + AttackMeleeRange * GetActorForwardVector(),
FQuat::Identity,
ECC_ATTACK,
FCollisionShape::MakeSphere(AttackMeleeRadius),
Params
);
TArray<FHitResult> HitResults;
// 함수 실행 후 여기에 모든 충돌 정보가 저장됨
GetActorLocation() : 탐지를 시작할 위치
GetActorLocation() + AttackMeleeRange * GetActorForwardVector() : 시작 위치에서 전방으로 Range 만큼의 곱한 거리(끝 위치)
FQuat::Identity : 탐지할 도형의 회전 값으로 Identity 는 회전이 없는 설정
다른 회전 옵션은 아래와 같다.
// 회전 없음 (가장 일반적)
FQuat::Identity
// 특정 각도 회전
FQuat::MakeFromEuler(FVector(0.0f, 0.0f, 45.0f)) // Z축으로 45도
// 액터 회전값 사용
GetActorRotation().Quaternion()
// 방향 벡터에서 회전값 생성
FQuat::FindBetweenNormals(FVector::ForwardVector, TargetDirection)
ECC_ATTACK : 콜리전 채널로 감지하고자하는 콜리전 채널을 설정
(필자는 Attack이라는 Trace 채널을 새로만들어둔 후 프로젝트 헤더 파일에서 아래처럼 매크로 정의를 해뒀다.)
프로젝트 파일의 헤더파일에서 설정을 해줘야함 (필자의 프로젝트 파일은 Sparta_Basic_A_Study)
- Sparta_Basic_A_Study.h

FCollisionShape::MakeSphere()
Sweep 에 사용할 도형 정의로 파라미터 값으로 반경을 주어 감지할 범위를 설정할 수 있다.
사용가능한 다른 도형들은 아래와 같다.
// 구체 (Sphere)
FCollisionShape::MakeSphere(float Radius)
FCollisionShape::MakeSphere(100.0f) // 반지름 100
// 박스 (Box)
FCollisionShape::MakeBox(FVector HalfExtents)
FCollisionShape::MakeBox(FVector(50.0f, 50.0f, 100.0f))
// 캡슐 (Capsule)
FCollisionShape::MakeCapsule(float Radius, float HalfHeight)
FCollisionShape::MakeCapsule(50.0f, 100.0f) // 반지름 50, 반높이 100
Params :
충돌 응답 파라미터
'알아두면 좋은 것들(언리얼 관련 여러 잡다한 정보)' 카테고리의 다른 글
| BTTaskNode 와 BTTaskNode_BlackboardBase (0) | 2025.09.16 |
|---|---|
| BTTaskNode 에 존재하는 Task들 (0) | 2025.09.15 |
| 언리얼 오브젝트 풀링 이란 (3) | 2025.08.19 |
| TSubclassOf<> 에 대하여 (1) | 2025.08.08 |
| 블루프린트에 있는 캐릭터 Move를 C++ 로 옮기기 (1) | 2025.08.05 |