Unityの「ジョイント」を使ってバンジージャンプをつくってみよう

Unityでは「ジョイント」という仕組みを使うことで、バネやヒンジなどで繋がれた物体の物理演算を再現することができます。
今回はバネやゴムの挙動を表現できる「Spring Joint」を使ってバンジージャンプをつくってみましょう。

「Ridable Item」の機能を使った椅子で、バンジージャンプのハーネスにあたる部分をつくります。

  • Hierarchyを右クリック、または上部メニューのGameObjectからCreate Emptyで新しい空のGameObjectを作成します。名前はBungyとしておきましょう。
  • Bungyを選択してInspectorを開き、Add Componentから「Ridable Item」コンポーネントを追加します。
  • またHierarchyでBungyを右クリックして、子オブジェクトとして3D Object>Cubeを追加します。
    • CubeのInspectorで、Scaleを変更して大きさを調整してください。このCubeが椅子の見た目とクリック範囲になります。

ここまでできたら一度実行してみましょう。Cubeをクリックすると座れるようになっています。

続いて、つくったアイテムに座ると、押し出されて落ちていくようにします。

飛び降り台をつくる

まずは飛び降り台をつくります。

  • 地面から100mほどの位置にCubeなどを設置して、立てる場所を用意してください。
    • CubeのScaleを変更して前後左右(XZ)方向に広げ、ちょうどいい大きさにします。
  • 飛び降り台ができたら、Spawn Pointを飛び降り台の上に移動するか、Warp Player GimmickやPlayer Enter Warp Portalなどで飛び降り台の上に移動できるようにしてください。
  • また、先ほどのBungyオブジェクトを飛び降り台の端に乗るように移動しておきます。

Bungyの正面が飛び降り台の端を向くようにします。Transform Toolの表示モードをLocalにして、Bungyを選択したときに青色の矢印が向く方向が正面です。

押し出されて落ちるようにする

  • BungyオブジェクトのInspectorから「Movable Item」コンポーネントを追加します。Movable Itemと同時に「Rigidbody」コンポーネントが自動で追加されたことを確認してください。
  • さらに、アイテムに押し出す力を加える「Add Instant Force Item Gimmick」コンポーネントを追加します。
    • Targetは「This」、Keyは「GetOn」とし、Force>Zを「10」とします。
  • 座ったときにギミックを発動させるため「On Get On Item Trigger」コンポーネントを追加してトリガーをひとつ追加します。
    • Targetを「This」、Keyを「GetOn」、Valueを「Signal」としておきます。

これで、飛び降り台の上にあるBungyに座ると自動で押し出されて落ちていくようになりました。実行して試してみましょう。

※押し出されても台の端まで届かず落ちない場合は、Bungyの位置を台の端に近づけてください。
※入室と同時にBungyが吹き飛んでしまう場合は、Bungyの初期位置が飛び降り台のコライダーと重なっている可能性があります。少し上に浮いた状態にしてください。

このままではただ落ちるだけなので、次にSpring Jointを使って命綱をつくっていきます。

それでは、バンジージャンプのように地面に真っ直ぐ落ちないようにしていきます。

  • Bungyオブジェクトに「Spring Joint」コンポーネントを追加します。
    • Spring Jointの「Max Distance」を80くらいの値にします。
    • バネの固定点からMax Distanceの距離以上に離れたときにバネが縮む力が働くため、「伸びていない状態の長さが80mのゴムひも」にすると思ってください。
    • バネの固定点は「Anchor」から調整できます。(0, 0, 0)だとオブジェクトの初期位置が基準になります。

実行してみましょう。Bungyに座ると押し出されて落ちていきますが、途中で引き戻されるようになります。

Spring JointやRigidbodyの設定はワールドに合わせて微調整してください。
調整のポイントをいくつか紹介します。

ゴムひもの長さを変える

ゴムひもの長さは先ほど紹介した通り、Spring Jointコンポーネントの「Max Distance」で調整できます。
ここで設定した長さからさらに引き延ばされるので、飛び降り台の高さより短めにしておきましょう。長すぎると地面に激突してしまいます。

ゴムの強さを変える

Spring Jointコンポーネントの「Spring」の値を大きくすると、強い(伸びにくい)バネになります。
伸びきったときに勢いよくバウンドさせたいときは大きく、反対にゆるく収束していく感じにしたいときは小さくしてみましょう。

揺れが収まっていくようにする

初期値のままでは落ちたあといつまでも揺れ続けてしまうので、揺れが自然に収束していくようにしてみましょう。
Bungyの「Rigidbody」コンポーネントで、「Drag」の値を初期値の0から大きくしてください。目安は0.1程度から、大きくても0.5程度です。
Dragの値が大きいほど減速しやすくなり、揺れが早く収まります。

回転しにくくする

飛び降りたあと回転し続けてしまって気持ち悪いという場合は、Rigidbodyの「Angular Drag」を大きくします。Angular Dragが大きいほど回転しにくくなります。

他にもRidable Itemの「Avatar Override Animation」でポーズを指定してみたり、周りの景色にこだわる、3Dモデルを用意するなど、工夫してみましょう!

記事をシェアしてワールド制作を盛り上げよう!