1 / 14

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作. 第 5 回 当たり判定・リベンジ. 今日の内容. 究極の当たり判定を求めて 球の拡張 OBB 完全版 凸包 戻し方で苦労しよう. 球ベース判定の傾向と対策. 球 シンプルイズベスト 球だけで押し通すのは厳しいが、他の判定と併用することも多い 球の中心を「点」から「線分」に拡張することにより、「カプセル」へと進化する カプセル 球よりボリュームの広いエリアをカバー 球の弾丸貫通問題対策としても使用 ボーンのように組み合わせれば人型キャラの判定は十分作れる. 角張り系判定. AABB

kata
Download Presentation

プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作 第5回 当たり判定・リベンジ

  2. 今日の内容 • 究極の当たり判定を求めて • 球の拡張 • OBB完全版 • 凸包 • 戻し方で苦労しよう

  3. 球ベース判定の傾向と対策 • 球 • シンプルイズベスト • 球だけで押し通すのは厳しいが、他の判定と併用することも多い • 球の中心を「点」から「線分」に拡張することにより、「カプセル」へと進化する • カプセル • 球よりボリュームの広いエリアをカバー • 球の弾丸貫通問題対策としても使用 • ボーンのように組み合わせれば人型キャラの判定は十分作れる

  4. 角張り系判定 • AABB • XYZ軸に平行な直方体 • 球やカプセルとの判定も可能で、その場合は裏技を使ってOBB同様の扱いができる • OBB • 自由に回転できる直方体 • 角張り系判定の究極系とされる • 凸包 • 対球に関しては最強レベルの判定素材 • 凸包同士や、その他の判定素材との連携が困難

  5. 凸包とは • 凹んだ部位のない立体 • n角柱、n角錐なども凸包に含まれる • 点(球)との内外判定がべらぼうに簡単 • 衝突検出になると難しいが。。。

  6. とりあえずおすすめは • キャラ • 球(カプセル)、OBB • 障害物 • OBB • 地形 • OBB、角張り系 • 乗っかれる必要があるデカキャラなど • OBB • 視界判定 • ベクトルの内積による角度判定&距離 • 攻撃判定 • 球、カプセル

  7. 戻し方 • 動物体の次フレームでの位置を仮定する • その動きを阻害する可能性のある物体全てと衝突判定を行う • 戻しベクトルが発生したら動物体に適用する • 全物体と判定を終えたら終了… ではない

  8. 以下のようなシチュを考える • 右図のような状況の場合、Aに衝突して発生した戻しベクトルによって、Bに衝突する危険性がある • A→Bの順に判定できればいいが、そうならなかったらどうする? 真上から見た図 A B

  9. 解決案 • 全部の物体と判定して、「戻しベクトルが発生しなかったら」判定終了とする • 色々効率化の余地はあるだろうが、とりあえずはこうしておこう do { 戻しベクトル初期化 for(障害物全部) { 当たり判定する 戻しベクトル加算 } 動物体に適用 } while(適用したベクトルがゼロじゃなかったらもう1回ループ);

  10. 重力の扱い • 基本的には常時下向きの力を働かせる • そうすると、同じ高さで並べたブロックでつっかかる • 足下のブロックから先に判定できればいいが、そうもいかない • 速度をXZ方向とY方向に分解して2回判定 真横から見た図 A B

  11. 物体を押せるようにした場合 • 押されて動いた物体vs全物体での判定も必要 • 連鎖的に押せるような状況作りは困難 • 判定回数が指数関数的に増加する • 押して動かせるのは限定的にするべき

  12. 効率的な判定のためテクニック • 距離で刈り込む • OBBの判定より距離の判定の方が軽い • 具体的な距離の値が要らない(距離内かどうかだけが知りたい)場合は、ベクトルの長さの2乗と判定距離の2乗で比較しよう • if(vec.dist2() < d*d) のように判定 • fkut_OBBでは内部実装済み • クラスタで刈り込む • 常時全物体と判定するのはナンセンスの極み

  13. クラスタリングって? • モノの分類や、グループ分けのこと • マップを領域ごとに分割する • 領域ごとに「どの物体が存在しているか」のリストを持つ • 判定したくなったら、自分が居る領域のリストに問い合わせて判定 真上から見た図

  14. クラスタリングに必要な部品 • 座標→クラスターIDへの変換 • (x, z)の座標値を、一定間隔ごとの整数値に変換する必要がある • 配列の配列 • クラスターIDで問い合わせると、対応する領域の物体情報が取れるようにしたい • vector< vector<int> >などを使う • 本当はlistなどに出来ればした方がよい

More Related