「ジョイント」を使ってブランコをつくってみよう

Unityでは「ジョイント」という仕組みを使うことで、バネやヒンジなどで繋がれた物体の物理演算を再現することができます。
今回はジョイントを使ってブランコをつくってみましょう。

座れるオブジェクトをつくる

まずはブランコの座面となる、座れるオブジェクトをつくっていきます。

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

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

Jointの設定をする

続いて、この座面をブランコとして揺れるように設定していきましょう。

  • SwingのInspectorを開いて、Add Componentから「Rigidbody」「Movable Item」のコンポーネントをそれぞれ追加します。
    • Rigidbodyは重力や力といった物理演算をおこなうためのコンポーネント、Movable ItemはclusterのワールドでRigidbodyなどの設定された動くアイテムを扱うときに必要となるコンポーネントです。
  • さらに「Hinge Joint」コンポーネントを追加します。
    • Hinge Jointは蝶番のように、ひとつの回転軸で自由に回転することができるジョイントです。
      • 他にもバネのような動きができるSpring Jointなどがありますが、今回は前後方向だけに揺れるブランコをつくるのでHinge Jointを利用します。
  • Hinge Jointコンポーネントの「Anchor」の項目を設定しましょう。ここには回転の中心となる位置を指定します。
    • 今回は(X, Y, Z) = (0, 2, 0)として、座面オブジェクトから2m上の点を中心に回転するようにします。
    • また、Axisの項目が(X, Y, Z) = (1, 0, 0)となっていることを確認しておきます。この項目では、値が「1」になっている軸が回転軸になります。この場合はX=1なのでX軸を中心に回転します。
      • ※正確には、この項目で設定した「ベクトルの向き」が回転軸になります。

以上でJointの設定は完了です。これでブランコのように揺れる仕組みはできあがりましたが、このままでは力が加わらないため揺れません。

ブランコに座ると揺れるようにする

ブランコに座ると自動的に押し出す力が加わって揺れるようにしていきます。

  • SwingのInspectorで、Add Componentから「Add Instant Force Item Gimmick」を追加してください。
    • ※似た名前のギミックが複数あるので注意してください。
    • Add Instant Force Item Gimmickの設定で、Targetを「This」、Keyを「Push」とします。
    • また、Forceの項目は(X, Y, Z) = (0, 0, 1)としましょう。
    • これで、PushというSignalが発行されたときに、Z軸方向に力が加わります。
  • さらに「On Get On Item Trigger」コンポーネントを追加します。
    こちらはRidable Itemに座ったときに通知するトリガーです。
    • +ボタンで項目を追加し、Targetを「This」、Keyを「Push」、Valueを「Signal」と設定してください。

以上で、ブランコに座ったときに押し出す力が加わって揺れるようになります。アップロードして確かめてみましょう!

3Dモデルを用意したり、Ridable Itemの各項目を設定するなど、工夫してみてください。

今回は座った瞬間にだけ力が加わるようにしましたが、例えばSteer Item Triggerを使って「漕ぐ」操作ができるようにしてみても面白いかもしれません。
Jointは設定項目が多く複雑ですが、使いこなすと面白い表現をつくることができます。
ブランコ以外にも、さまざまな「揺れるもの」をつくってみましょう!

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