Hit 이벤트
저번에 충돌 처리 중, Overlap을 봤다면 이번에는 Hit를 알아보자.
BP_Box의 자손 블루프린트로 BP_Hit를 만들었는데, 여기 오버라이드 함수 중에 있는 Hit 이벤트 함수를 추가한다.
● Hit 이벤트 : 이 액터가 블로킹 오브젝트에 부딛히거나 부딛힌 다른 액터를 블록할 때 이벤트를 발생한다.
캐릭터 무브먼트, Sweep을 켜고 Set Location을 사용할 때, Physics Simulation 등으로 인해 발생한다.
- My Comp : 내 어떤 컴포넌트가 Hit 했는지
- Other : 나와 충돌한 상대
- Other Comp : 충돌한 상대의 컴포넌트
- Self Moved : 본인이 직접 움직여서 충돌했는지의 여부
Collision의 충돌 판정을 변경하고 싶다면 해당 Collision 디테일의 콜리전 프리셋을 보면 된다.
여기선 BlockAll을 통해서 Hit 충돌을 구현한다.
- OverlapAll.Dynamic : 자기자신은 Dynamic이고, 모든 모든 대상에 대해서 곂침
- BlockAll : 기본적으로 자기자신은 WorldStatic이다.
Simulate Physics
Collision 컴포넌트에 보면 피직스에 Simulate Physics가 있다. 이 기능을 사용하게 되면 대상이 중력을 비롯한 물리 법칙의 영향을 받게 된다.
Physics Simulation 사용 중에 MassKg와 Mass Scale을 수정하여 대상의 질량을 바꿔줄 수 있다.
Simulation Generates Hit Events
기본적으로 Physics Simulation 중에는 Hit 이벤트를 발생시키지 않는다.
이 기능은 Physics Simulation 중에 이 물체가 충돌하면 Hit 이벤트를 발생시키는지의 여부를 말한다.
따라서 대상에 Hit 이벤트가 발생해야할 대상에서 기능을 켜주면 된다.
Append
연결한 문자열들을 모두 합쳐서 새 문자열을 만들어내는 노드이다. 앞의 A핀의 문자열부터 순서대로 합쳐진다.
Delta Seconds
매 초마다 물체를 전방으로 초당 100씩 움직이도록 한다고 해보자.
전방으로 움직이기 위해서 Actor의 Forward(전방)의 방향을 받아온다. - 속도
여기에 100의 플로트를 곱해준다. - 속력
Tick 이벤트 함수를 통해서 계속해서 이벤트를 발생시키게 될텐데, 여기서 Delta Seconds는 무엇일까?
Delta Seconds(또는 Delta Time)는 이전 Tick이벤트에서 다음 Tick이벤트가 호출되기까지의 걸린 시간을 말한다.
Speed * Delta = 초당 이동량. 따라서 Delta Seconds와 속도를 곱해주었다.
※ Delta Time이 필요한 이유
컴퓨터의 성능에 따라 FPS이 다를텐데 이에 따라 초당 값이 변화할 수 있다.
그래서 이전 업데이트부터 현재 업데이트가 호출되기까지의 걸린 시간을 계산하여 초당 변화량을 나타낼 수 있어 성능에 관련없이 항상 균일한 값을 도출해낼 수 있다.
이후 Set Location을 통해서 이동하게 된다면 짧은 거리를 계속하여 순간이동한다고 볼 수 있다.
그래서 캐릭터로 움직이는 물체와 충돌했을 때 계속해서 밀려나며 Hit 이벤트가 발생하지 않는다.
여기서 Sweep을 사용하여 Location으로 이동 시, 빈 공간을 연속적인 이동을 했다고 채워줌으로 써 캐릭터와 충돌 시에
Hit 이벤트를 발생시켜줄 수 있다.
Break Hit Result(히트 결과 분해)
Hit 이벤트에서 Hit 후 결과들의 가져올 수 있는 정보들이 있다.
- Location : 월드 공간 기준으로 Hit가 발생한 위치를 말한다.
- Normal : Hit 지점에서 Sweep 대상 오브젝트의 방향
- Hit Actor : 어떤 액터가 충돌했는지
- Hit Component : 어떤 컴포넌트가 충돌했는지
- Hit Bone Name : 충돌한 컴포넌트가 Mesh라면 Bone Name도 얻어올 수 있다.
'언리얼엔진' 카테고리의 다른 글
27. 충돌판정 수정하기 / AnimNotifyState (2) | 2023.06.11 |
---|---|
26. 콜리전 프리셋 / Object Type / Apply Damage / AnyDamage (1) | 2023.06.09 |
24. 머티리얼 / Construction Script / Overlap (0) | 2023.06.06 |
23. 블렌드 스페이스(8방향) / Calculate Direction (0) | 2023.06.01 |
22. 블루프린트 함수 라이브러리 / 애니메이션 스테이트 (0) | 2023.06.01 |