最初のジオラマシーンには、本物の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のキャラクターボディ化、そしてプレイヤーを隠す背景のフェードです。