而撰寫特效程式時,時常會需要取得骨架上的某個位置。其實可以只用一個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 ); } }
沒有留言:
張貼留言