SetSimulatePhysics(true)
SetNotifyRigidBodyCollison(true)
OnComponentHit()
이벤트 발생SetGenerateOverlapEvents(true)
OnComponentBeginOverlap()
, OnComponentEndOverlap()
과 같은 이벤트를 호출NotifyBeginOverlap()
도 있음여기서 보면 물리적 충돌과 Blocking 충돌이 비슷해 보인다
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/collision-in-unreal-engine---overview
각 오브젝트 마다 콜리전에 관한 설정을 해야함
block
Overlap
Collision Responces
Collision Enabled
No Collision
: 충돌 없음Query Only
: Overlap, Hit 등 충돌 이벤트는 감지하지만, 물리적으로 튕기거나 밀리는 반응은 없음.Physics Only
: 물리 반응만 일어나고, 이벤트 (Overlap/Hit)는 발생하지 않음.Collision Enabled
: Query Only
+ Physics Only
ObjectType에서 2개가 직관적이지 않아 설명 추가 (C++코드에서는 ECC_
가 붙음)
위에 있는 방식은 블루프린트를 사용한 것
직접 에디터에서 만든 Collision Preset은 c++로 수정할 수는 있지만, 수정한 상태를 저장하지는 못함 (DefaultEngine.ini 파일에 저장되어 있는 거라 런타임으로 수정 불가능)
=> preset을 사용할 때는 preset을 먼저 적용하고 SetCollisionResponseToChannel()
로 개별적으로 변경해서 사용할 수 있음
sweep : 오브젝트를 이동할 때, 이동 경로상의 충돌을 감지하고 겹쳐지지 않도록 막아주는 기능
bool SweepSingleByChannel(struct FHitResult& OutHit, const FVector& Start, const FVector& End, const FQuat& Rot, ECollisionChannel TraceChannel, const FCollisionShape& CollisionShape, const FCollisionQueryParams& Params, const FCollisionResponseParams& ResponseParam) const
이동 함수에서 sweep 인자와 HitResult 인자에 true와 HitResult 변수를 넣어주면 자동으로 됨
sweep 말고 라인 트레이스(Line Trace)라는 방식도 있는데 sweep과 매우 유사하다
bool LineTraceSingleByChannel(struct FHitResult& OutHit, const FVector& Start, const FVector& End,ECollisionChannel TraceChannel, const FCollisionQueryParams& Params = FCollisionQueryParams::DefaultQueryParam, const FCollisionResponseParams& ResponseParam = FCollisionResponseParams::DefaultResponseParam) const;
참조 사이트
1. https://krjm2404.tistory.com/31
2. https://rhksgml78.tistory.com/657
3. https://wecandev.tistory.com/136
4. https://openmynotepad.tistory.com/118
5. https://leekangw.github.io/posts/81/
6. https://dev.epicgames.com/documentation/ko-kr/unreal-engine/collision-response-reference-in-unreal-engine