Sample5の解説

 

 

Sample 5は骨による当たり判定処理です

Leftキーを押すと、左に移動

Rightキーを押すと、右に移動し

箱と当たっていたら、箱が赤くなります

 

まずは、骨コリジョンのセットアップをします

 

AnimationPlayer.SetUpMesh(Model model,float weight);
AnimationPlayer.SetUpMesh(Model model,float weight, bool IsXSI);
weightには影響される骨の範囲を設定してください
1.0fを設定すると、weightが1.0f未満の頂点からはコリジョンが作られません
0.3fくらいがベターなんじゃないでしょうか?
IsXSIをtrueにすると、UVのu値が逆転します

 

毎回頂点からOBBないしスフィアを作成するのは重いので

ただ単に位置更新で対応します

Update処理内で

 

AnimationPlayer.UpdateBoneCollision();
AnimationPlayer.UpdateBoneCollision(int index);
AnimationPlayer.UpdateBoneCollision(string boneName);
を記述し、骨コリジョンを更新します
()に何も記述しないと、全ての骨コリジョンが更新され
indexやboneNameを指定すると、指定された骨コリジョンが更新されます

 

最後に骨コリジョンとの当たり判定をとります

AnimationPlayer.CheckCollision(BoundingSphere bs);

AnimationPlayer.CheckCollision(int index,BoundingSphere bs);
AnimationPlayer.CheckCollision(string boneNmae,BoundingSphere bs);
AnimationPlayer.CheckCollision(OrientedBoundingBox obb);
AnimationPlayer.CheckCollision(int index,OrientedBoundingBox obb);
AnimationPlayer.CheckCollision(string boneNmae,OrientedBoundingBox obb);
BoundingSphereには判定したいBoundingSphere
OrientedBoundingBoxには判定したいOrientedBoundingBoxを指定してください
indexやboneNameを指定すると任意骨との当たり判定になります

 

当たっていればtrueが、外れていればfalseが戻り値として返ってきます
この時、BoundingSphereの場合は骨BoundingSphereとの当たり判定
OrientedBoundingBoxの場合は骨OBBとの当たり判定を習得します

« 前の記事: を読む

次の記事: を読む »

コメント

※名前の入力は必須です

コメントを残す

---

以下のHTMLタグが使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

※管理人にのみコメントを残す場合は、こちらのフォームよりお願いします