而撰寫特效程式時,時常會需要取得骨架上的某個位置。其實可以只用一個name欄位來指定socket或bone,只要骨架上socket和bone的名稱不重覆就不會有問題。
不過UE沒有提供方便的函式直接取得socket或bone的位置,需要自行撰寫一個:
function bool GetSocketOrBoneLocationAndRotation(SkeletalMeshComponent Mesh, name SoBName, out Vector Loc, out Rotator Rot)
{
local SkeletalMeshSocket Socket;
Socket = Mesh.GetSocketByName( SoBName );
if( Socket == none )
{
BoneIndex = Mesh.MatchRefBone( SoBName );
if( BoneIndex == INDEX_NONE )
{
return false;
}
else
{
TM = Mesh.GetBoneMatrix( BoneIndex );
Pos = MatrixGetOrigin( TM );
Rot = MatrixGetRotator( TM );
return true;
}
}
else
{
return Mesh.GetSocketWorldLocationAndRotation( SoBName, Loc, Rot );
}
}
沒有留言:
張貼留言