UDK unreal s c r i p t에서 damage 처리 쪽에 몇 구절인데요.
event TakeDamage(
int damageAmount, Controller eventInstigator,
Object.Vector hitLocation, Object.Vector momentum,
class
)
{
(생략)
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