Joël van der Werf
記事一覧

Joltで歩けるジオラマ:カプセル、スロープ、ゲームプレイ用の形状

バウンディングボックスからJolt Physicsによる本物の3D衝突判定へ。そして、それをシンプルにした2つのルール。

最初のジオラマシーンには、本物の3D衝突判定がありませんでした。プレイヤーは、すべてのメッシュにバウンディングボックスの上面を問い合わせる代用品の上を歩いていました。箱や段々畑には使えますが、曲がった橋、坂、洞窟の床には使えず、新しいアートの方向性はそのすべてを含んでいました。

そこでHydroは、3DにはBox2Dと同じ物理サブシステムの裏でJolt Physicsを使うようになりました。2DゲームにはBox2Dが残ります。

ルール1:ゲームプレイの形は見た目の形ではない

見えるものと歩くものは、別々に設計します。

  • 階段:見るための段、歩くためのスロープ。
  • 鳥居:2本の柱のコライダー、屋根には何もなし。
  • 木:幹のコライダーと遮蔽物。

組み込みの形状は、そのままの形で衝突します。箱は箱、階段はスロープとして。読み込んだモデルは、モデルファイル内の専用ノードでだけ衝突します。固い凸形状は_COL、歩ける三角形は_WALK。これらは描画されません。描画用のメッシュがうっかり衝突判定になることはありません。

ルール2:カプセルがキャラクターである

髪、袖、武器、アニメーションのフレームが衝突判定を変えることはありません。すべてのキャラクターはJoltのCharacterVirtualで、エンティティの位置、つまりスプライトの足元に立つカプセルです。

  • 壁に沿って滑る、
  • 最大角度までの坂を歩く、
  • 階段の縁のような小さな段差を上り下りする、
  • 下り坂で地面に吸い付く、
  • 設定すれば崖から絶対に落ちない。

スクリプトからの操作

スクリプトはキャラクターを直接動かしません。更新ステージで行きたい方向をCharacterBody::Move(entity, velocity)で伝え、残りは物理ステージが60Hzの固定ステップで処理します(1フレーム最大4ステップなので、処理落ちが連鎖しません)。結果はトランスフォームに書き戻され、ステップ間で補間されるので、高リフレッシュレートの画面でも動きは滑らかです。

Joltの状態はすべて、コンポーネントではなくシーンごとのPhysicsScene3Dにあり、Hydroの実行時の状態のルールに従っています。再生で作られ、停止で破棄されるので、実行間で何もリークしません。

今後

剛体やジョイントはまだなく、キャラクター同士も衝突しません。次は_WALKノードで作る曲がった橋と洞窟、NPCのキャラクターボディ化、そしてプレイヤーを隠す背景のフェードです。

前の記事:トーンマップの「トゥ」を外した理由次の記事:街灯は一つのもの:シーンヒエラルキーと実行時UI

お仕事のご相談はお気軽にどうぞ

東京在住です。Unity・C++・ゲームエンジン関連のポジション、C#・.NETのソフトウェア開発のポジション、そしてAIエージェントを活用した開発体制づくりに関心があります。英語・オランダ語・日本語(勉強中)で対応できます。