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との当たり判定を習得します
コメント