• [Unreal 게시판] TakeDamage() 함수에서 충돌 normal 구하는 방법2015.02.25 PM 12:57

게시물 주소 FONT글자 작게하기 글자 키우기

Question>

UDK unreal s c r i p t에서 damage 처리 쪽에 몇 구절인데요.

event TakeDamage(
int damageAmount, Controller eventInstigator,
Object.Vector hitLocation, Object.Vector momentum,
class damageType, optional TraceHitInfo hitInfo, optional Actor damageCauser
)
{
(생략)

local StaticMeshComponent tmp;

tmpHitLoc = MakeLinearColor(
hitLocation.x - location.x - tmp.translation.x,
hitLocation.y - location.y - tmp.translation.y,
hitLocation.z - location.z -tmp.translation.z,
1
);

(생략)
}

제가 이해하기로는 'hitLocation' 충돌 위치이고요?
'location.x' 이게 충돌 노말방향인가요?

-------------------------------------------------------------

Answer>

충돌 normal vector(hit normal vector)은 아래와 같이 구하실 수 있습니다.

local vector vecHitNormal1, vecHitNormal2;
vecHitNormal1 = normal( momentum );
vecHitNormal2 = vector( hitInfo.hitComponent.rotation );

vecHitNormal1와 vecHitNormal2는 대부분 같지만,
zero momentum( momentum의 크기가 0에 가깝거나 0인 경우 ) 상황이 발생할 가능성도 있어서리..^^;;;;;;;
zero momentum 상황에서는 계산을 거르거나
아래와 같은 방법으로 hit normal을 계산하도록 처리할 필요가 있습니다.

if( vsize( momentum ) < 0.001f )vecHitNormal1 = normal( location - hitLocation );
//여기서, vecHitNormal1의 길이가 0에 가까울 값이 나오는 건 불가능에 가깝습니다.
//왜냐하면, mesh의 부피 때문에요.^^;;;;;;;

딱히 정해진 방법은 없는데, 위 방법이 그나마 무난하더라구요.^^







Tag:
안기훈, Kee Hoon Ahn, 언리얼, Unreal, UDK, iPhone, iPad, app, 앱, iOS
댓글 : 0 개
친구글 비밀글 댓글 쓰기

user error : Error. B.