UE4에서는 충돌에 영향을 주고 받을 수 있는 두가지 유형의 Component가 있다.
Mesh
Shape Object
mesh의 경우 단순한것부터 수천 개의 vertex를 갖는 고해상도 캐릭터까지 개많음.
근데 물리엔진이 런타임에 충돌을 효율적으로 계산하기 위해서 Collision Mesh가 단순해야 하므로 일반적으로는 Collision mesh를 가능한 단순하게 유지하는 것이 좋다.
Collision을 가질 수 있는 mesh의 유형은
static mesh
스켈레탈 mesh
Procedural mesh
etc
그러면 이런 Component들(mesh, shape object)이 어떻게 충돌하고 어떤일이 발생하냐면은?
Block
두 물체 모두 OnHit 이벤트가 호출됨. OnHit이벤트는 두 물체가 서로 충돌하는 순간서로의 경로를 막을 때마다 호출된다. 두 물체중 하나가 피직스를 시뮬레이션 할 경우 => SimulationGeneratesHitEvents 속성을 true 로 해야함.
Overlap
두 물체 모두 GenerateOverlapEvent 속성이 true일 경우 두 물체에서 OnBeginOverLap, ObEndOverlap이벤트가 호출됨.
Ignore
두 물체 아무런 이벤트 호출 하지 않는다.
피직스 Physics
공이 중력에 영향을 받고 바닥과 벽에서 튀어오르는 등 피직스 시뮬레이션과 관련된 모든 충돌
쿼리 Query
충돌을 두가지 측면으로 또 나눌 수 있다.
[1] 두 물체의 충돌과 관련된 이벤트는 게임에서 호출하며추가 로직을 만드는데 활용할 수 있다.
=> OnHit 이벤트, OnBeginOverlap 이벤트, OnEndOverlap이벤트[2] 게임 안에서 충돌의 물리적 반응은 두가지 중 하나이다.
=> 두 물체가 서로 다른 물체가 없는 것처럼 계속 이동한다.
=> 두 물체가 서로 충돌하며 서로의 경로를 막는다.
물리 엔젠은 현실에서 일어나는 물리적인 상황 구현을 도와주는 엔진입니다
피직스 시뮬레이션이란 현실에게 일어나는 물리적인 현상을 애셋에 적용시키는 것입니다.
파직스를 기반으로한 물리적 반응과 쿼리를 기반으로한 물리적 반응은 비슷할 수 있지만 다르다.
물체가 다르게 동작한다.
피직스를 기반으로하는 물리적 반응(피직스 시뮬레이션)은 한 물체가 피직스 시뮬레이션중인 경우에만 적용된다(중력에 영향을 받거나 벽 및 바닥에 튕기는 것들)
반면, 쿼리를 기반으로하는 물리적 반응은 피직스 시뮬레이션 중이 아닌 "모든" 물체에 적용된다.
어떤 물체를 코드로 제어하는 경우에는 피직스 시뮬레이션을 사용하지 않고도 이동시킬 수 있다.
코드로 물체를 제어하는 경우 벽에 부딪혔을 때 튕겨져 나오지 않고 단순히 멈출 수 있다.
현재 큐브 클릭후 Collision섹션을 보면은
Simulation Generate Hit Events
피직스 시뮬레이션을 할 때 OnHit이벤트를 호출 시키는 옵션
Generate OverlapEvents 옵션
OnBeginOverlap/ObEndOverlap이벤트를 호출 시키는 옵션
CanCharacterStepUpOn
캐릭터가 물체에 쉽게 오를 수 있도록 해주는 옵션
CollisionPresets
개별 Collision Channel에 대한 이 물체의 반응을 지정할 수 있는 옵션
Collision Presets에서 물체에서 고려할 충돌 방식을 쿼리, 피직스, 둘다, No Collision 중에 선택 가능함.
Physics Coliision은 피직스 시뮬레이션과 관련이 있다. 즉, 피직스를 시뮬레이션 하는 다른 물체가 이 물체를 고려하는지 여부와 관련 있다는 말이다.
반면 쿼리 콜리젼은 충돌 이벤트와 다른 물체의 움직임을 막을지 여부를 결정하는 것과 관련이 있다.
오브젝트 충돌을 위한 특별한 옵션이다.이 옵션은 어떤 유형의 충돌 오브젝트인지를 나타냄.
커스텀 object type도 만들 수 있음.
플레이어가 닿을 수 없는 위치에 있고 아주 멀리있는 시각적인 용도애
바닥, 벽같은거
레벨에 배취돼 움직이지 않는 트리거 박스
플레이어 캐릭터와 플레이어가 아닌 다른 캐릭터
바닥과 벽에 부딪혀 튕기는 공, 물리에 영향을 받는 물체