[unrealengine4]

2023-06-07 언리얼(Hit 이벤트, 델타타임, Append, 피직스)

롤링페이퍼 2023. 6. 11. 20:27
Hit 이벤트

hit 이벤트 함수를 대해서 알아보자

 

BP_Box의 자손 프린트 BP_Hit를 추가해, 오버라이드 함수 중에 있는 hit 이벤트 함수를 추가한다.

 

Hit 이벤트 : 해당 엑터가 블로킹 오브젝트에 부딪히거나 부딪힌 다른 액터를 블록 할 때 이벤트를 발생시킨다. 캐릭터 무브먼트, Sweep을 켜고 Set Location을 사용할 때, physics Simulation 등으로 인해 발생한다.

 

- my Comp :

   ㄴ 충돌 이벤트를 트리거한 자신의 컴포넌트에 대한 참조 값

- Other :

   ㄴ 충돌 이벤트의 대상이 되는 다른 액터에 대한 참조 값

- Other Comp :

   ㄴ 충돌 이벤트의 대상이 되는 다른 컴포넌트에 대한 참조 값

- Self Moved :

   ㄴ 충돌 이벤트가 스위핑(영역 검사)에 의해 발생했는지 여부를 나타내는 Boolean(참, 거짓)

   ㄴ True로 설정된 경우, 충돌하는 동안 자신이 이동한 것을 의미한다.

- Hit Location :

   ㄴ 충돌 지점의 위치를 나타내는 3D 백터 값, 충돌이 발생한 지점의 위치를 나타낸다.

   ㄴ 충돌이 발생한 지점의 위치를 나타낸다.

- Hit Normal : 

   ㄴ 충돌 지점의 법선 백터를 나타내는 3D 벡터 값

   ㄴ 충돌 지점에서의 표면 방향을 나타낸다.

- Normal Impulse :

   ㄴ 충돌 지점에서의 법선 방향으로 가해진 충격량을 나타내는 3D 벡터 값.

   ㄴ 충돌로 인한 힘의 크기와 방향을 나타낸다.

- Hit :

   ㄴ 충돌 이벤트의 상세 정보를 담고 있는 FHitResult 구조체이다.

   ㄴ 충돌 지점, 충돌한 엑터 및 컴포넌트의 정보 등을 포함한다.


콜리전 프리셋

Simulation Generrates Hit Events : 이 옵션을 체크하면  해당 물리 시뮬레이션 동작중 엑터 간의 충돌이 일어날 시 Hit 이벤트가 발생하도록 한다.

콜리전 프리셋중 OverlapAll Dynamic와 BlockAll을 대해서 설명한다.

 - OverlapAll Dynamic : 모든 대상이 Overlap(겹침)인 상태이다.

   ㄴ OverlapAll은 충돌을 감지하는 설정 중 하나이며, 물리 충돌을 무시하고 겹치는 상태를 감지한다.

   ㄴ OverlapAll Dynamic 설정은 액터 또는 컴포넌트가 다른 액터 또는 컴포넌트와 겹쳤을 때, 겹친 상태를 감지하고 이에 대한 이벤트를 발생시킨다.

-  BlockAll : 모든 대상이 Block(블록)인 상태이다.

   ㄴ BlockAll은 충돌을 감지한 설정 중 하나로, 겹치는 상태를 막아 물리 충돌이 발생하지 않도록 한다.

   ㄴ BlockAll 설정은 액터 또는 컴포넌트가 다른 액터 또는 컴포넌트와 겹칠 경우 물리적인 충돌을 발생시켜 이동을 막는다.


Physics(피직스)

 

액터의 무개를 조정할수 있다.

물리 법칙에 영향을 받게되며 중력, 마찰, 충돌 등 물리적인 요소에 영향을 받을 수 있게 된다.

피직스의 디테일 설정

MassinKg : 활성화시 액터의 질량을 조절할 수 있다.

Mass Scale : 액터 또는 컴포넌트의 질량을 전체적으로 조절하는 비율이다. 사용할 시 질량의 상대적인 크기를 조정할 수 있으며, 값을 변경하면 해당 액터 또는 컴포넌트의 전체적인 질량이 비례적으로 조절된다.

 

예시)

MassinKg가 Mass Scale을 같이 사용할 경우

MassinKg의 값이 1이며 Mass Scale 값이 2 일경우

실제 질량은 2Kg으로 적용 된다.


Append 함수

사용 예시 노드

Append 함수 : 연결한 문자열을 합치는 기능이 있는 노드이다.

위 노드로 예시를 들 경우

B에 / 을 넣고 실행해 봤을 경우 other comp로 인한 값 이랑 B핀의 /  , Self Moved(참 거짓 확인용)가 합쳐 

other comp / self moved가 출력이 되는 것을 확인할 수 있을 것이다.

문자열을 합쳐주는 Append함수의 기능


Delta time

 

Delta time(델타 타임)

 

업데이트 함수가 실행되고 다음 업데이트 함수가 실행될 때까지 걸린 시간을 의미

사용자의 컴퓨터 성능에 따라 FPS가 다르기 때문에 같은 시간 동안 움직여도 서로 다른 결과가 나올 수 있다.

이를 해결하기 위해 델타 타임을 사용하는데 Speed x Time 대신 Speed x Delta Time(1/FPS)를 사용하여 계산하면 사용자의 컴퓨터 성능이 달라도 모두 공평한 결괏값이 나온다.

 

-해석-

붉은 표시 : 

Get Actor Forward Vector(전방)의 방향의 속도를 받아온다.

받아온 속도를 100의 플로트(float, 소수점일 수도 있으니)로 곱해준다.

 

파랑 표시 :

이후 Tick 이벤트의 발생 시간과 다음 Tick 이벤트의 발생시간(DElta Seconds)에 따라 전방속도와 다시 곱해준다.

'Speed * Delta = 초당 이동량'의 계산식이다.

 

노랑 표시 :

이후 초당 이동량을 다시 현재 위치에 더해 SetActorLoaction로 넘어갈 수(이동할 수) 있도록 대입해 준다.


Break Hit Result

 

핀 분할 하면 너무 커지고 복잡해질 수 있으니 정리시켜주는 노드이며

Hit Result 구조체의 정보를 해당 요소별로 분리하여 접근할 수 있도록 만들어져 있다.