프로그래밍/언리얼엔진

[언리얼] 각도에 따른 힘(Force)의 크기 보정하기

하바사 2024. 8. 12. 01:31

https://youtu.be/J9lVADyd8ZQ?si=9k9aVd57OfBzXMfQ

 

바람이 부는 기계를 만들기 위해 유튜브 튜토리얼 영상을 참고하던 중이었다.  

 

 

지정된 영역을 (촘촘히) LineTracing하여 쏘는 방향으로 AddForce 힘을 주는 건 무난히 이해했다. 

 

이 유튜브는 여기서 나아가 위치, 각도와 상관없이 균일하게 받는 힘을 물리적으로 계산하여 보정을 하기에 따로 정리해보았다. (저렇게 범위적으로 바람을 쏘는데 오브젝트가 요란하게 구르는 게 어색해 보인다는 의도에서인듯?)

 

 

힘이 가해진 표면의 노말 벡터를 이용해 힘의 방향을 split한다. 힘의 방향과 노말 벡터 반대 방향을 이용해 Force를 Project(물리적인 방향을 특정 방향으로 투영)한다. 두 벡터 내적으로 힘 크기를 보정한다.  (유튜버의 표현을 빌림)

 

 

 

HitResult가 ImpactNormal를 제공해주므로 이를 반대방향으로 (Negate Vector) 값을 얻은 뒤, 힘의 방향 벡터와 내적을 구한다. (캡쳐에서는 위 방향=Get Up Vector)

여기서 얻은 절대값을 힘의 값에 곱하면 비스듬히 맞아 줄어든 보정된 힘 값이 나온다.

여기서 나아가서 힘의 방향도 저 빨간 벡터합으로 바꿔야 한다고 하는데 강사왈 왜인지는 오래돼서 기억이 안난다고 한다.

 

 

표면 노말벡터 반대방향과 힘 벡터를 더하고 이를 Normalize한 것과 보정된 힘값을 곱하면 최종 힘값 완성.