-
라인 트레이스 추가Game Programming/언리얼 2023. 10. 3. 13:30
FHitResult FireHit; const FVector Start{ SocketTransform.GetLocation() }; const FQuat Rotation{ SocketTransform.GetRotation() }; const FVector RotationsAxis{ Rotation.GetAxisX() }; const FVector End{ Start + RotationsAxis * 50'000.f }; GetWorld()->LineTraceSingleByChannel(FireHit, Start, End, ECollisionChannel::ECC_Visibility); if (FireHit.bBlockingHit) { DrawDebugLine(GetWorld(), Start, End, FColor::Red, false, 2.f); DrawDebugPoint(GetWorld(), FireHit.Location, 5.f, FColor::Red, false, 2.f); }
Barrel Socket(총구)에서 시작 위치, 방향을 가져와 끝 위치를 계산했다.
const FVector Start{ SocketTransform.GetLocation() }; const FQuat Rotation{ SocketTransform.GetRotation() }; const FVector RotationsAxis{ Rotation.GetAxisX() }; const FVector End{ Start + RotationsAxis * 50'000.f };
소켓 행렬의 특정 축의 방향을 알고 싶다면 행렬의 회전성분을 4원수로 변경한 뒤 원하는 축의 방향을 벡터로 읽어오면 된다.
ECollisionChannel 열거형은 아래와 같이 정의되어있다.
- WorldStatic : 움직이지 않는 정적인 배경 액터에 사용하는 콜리전 채널이다. 주로 스태틱메시 액터에 있는 스태틱메시 컴포넌트에 사용한다.
- WorldDynamic : 움직이는 액터에 사용하는 콜리전 채널이다. 블루프린트에 속한 스태틱메시 컴포넌트에 사용한다.
- Pawn : 플레이어가 조종하는 물체에 주로 사용한다. 캐릭터의 충돌을 담당하는 캡슐 컴포넌트에 설정된다.
- Visibility : 배경 물체가 시각적으로 보이는지 탐지하는데 사용한다. 탐지에서 폰은 제외된다. 마우스로 물체를 선택하는 피킹(Picking) 기능을 구현할 때 사용한다.
- Camera : 카메라 설정을 위해 카메라와 목표물 간에 장애물이 있는지 탐지하는데 사용한다. 이전 GTA 방식으로 캐릭터를 조작할 때 장애물이 시야를 가리면 카메라를 장애물 앞으로 줌인하는 기능(SpringArm->bCollisionTest = true)이 있었다. 이때 사용하는 채널이 Camera 채널이다.
- PhysicsBody : 물리 시뮬레이션으로 움직이는 컴포넌트에 설정한다.
음,,,어떤 물체끼리 콜리전 시킬지 결정하는 열거형 같은데 이득우 책을 읽어봤는데
CollisionChannel을 사용자가 선택해서 커스텀하면 ECC_GameTraceChannel1 - 18까지 지정된다.
이 값은 DefaultEngine.ini 파일에서 확인이 가능하다.
'Game Programming > 언리얼' 카테고리의 다른 글
빔 파티클 (1) 2023.10.03 임펙트 파티클 (1) 2023.10.03 Animation Montage (0) 2023.10.03 Muzzle Flash (0) 2023.09.30 사운드 추가 (0) 2023.09.30