UnityUnityメモ

Unityで簡単!ヒンジジョイントを使った振り子の作り方

Unity

1.はじめに

Unityを使ってゲームやアプリを作るとき、物理エンジンを利用するとよりリアルでダイナミックな動きを簡単に実現できます。その中でも「ヒンジジョイント」を使うと、振り子のような動きや回転するオブジェクトを手軽に作ることができます。

今回の記事では、初心者の方でもすぐに取り組めるように、Unityでヒンジジョイントを使って振り子を作る手順をステップバイステップで解説します!Unityの操作にまだ慣れていない方も安心してください。わかりやすく進めていくので、一緒に楽しく学びましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2.振り子の基本的な構造を理解しよう

振り子は、物理学でもおなじみのシンプルな構造を持つ装置です。上の固定された点から下の重り(オブジェクト)が吊り下がり、重力と支点を中心にした回転運動によって揺れます。この仕組みをUnityで再現するために、以下のポイントを押さえておきましょう。

振り子の仕組みをUnityで再現

  1. 固定点(支点)
    振り子の上部を支える固定点に相当します。Unityでは、この部分をキューブ(Cube)などの3Dオブジェクトで表現します。
  2. 重り(振り子本体)
    揺れるオブジェクトになります。Unityでは、スフィア(Sphere)などの3Dオブジェクトを使います。この重りに物理挙動を加えることでリアルな動きを再現します。
  3. ジョイント(接続部分)
    振り子の重りを固定点に接続し、回転できるようにする重要な役割を果たします。Unityでは、この部分を「Hinge Joint(ヒンジジョイント)」コンポーネントで再現します。

Unityでの振り子のシミュレーションの流れ

Unityでは、支点(固定オブジェクト)に「Hinge Joint」を追加し、振り子本体(重り)に「Rigidbody」を設定することで、簡単に振り子の動きを実現できます。

  1. Hinge Jointの役割
    オブジェクト間の回転を可能にし、支点を中心に揺れるように設定します。
  2. Rigidbodyの役割
    Unityの物理エンジンを利用し、重りの質量や重力の影響をシミュレーションします。

このように、振り子は固定点、重り、ジョイントの3つの要素で構成されています。この構造をイメージしながら作業を進めると、Unityでの設定もスムーズになりますよ!



3.Unityでオブジェクトを配置しよう

それでは、Unityを使って振り子のオブジェクトを配置していきましょう!まずは振り子の「固定点」と「重り」を作成します。

1. 支点となるオブジェクト「TopCube」を作成

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. 表示されるメニューから「3D Object」→「Cube」を選択します。
  3. 作成されたキューブを選択し、名前を「TopCube」に変更します。
    名前を付けることで、後から管理しやすくなります。

2. 重りとなるオブジェクト「PendulumSphere」を作成

  1. 再びヒエラルキーウィンドウを右クリックします。
  2. 3D Object」→「Sphere」を選択します。
  3. 作成されたスフィアを選択し、名前を「PendulumSphere」に変更します。

3. オブジェクトを配置する

  1. PendulumSphere」を選択した状態で、インスペクター(Inspector)ウィンドウの「Transform」コンポーネントを確認します。
  2. 「Position」のY座標を調整して、TopCubeの真下に配置します。例えば、TopCubeのY座標が0の場合、PendulumSphereのY座標を-2に設定すると良いでしょう。
  3. 必要に応じてX座標やZ座標も調整して、中心が揃うように配置してください。

確認ポイント

  • 「TopCube」は振り子を支える固定点となるため、位置が動かないように配置します。
  • 「PendulumSphere」は重りとして、TopCubeの真下にぶら下がる形で配置します。

これで振り子の基本構造が完成しました!次は物理挙動を追加して、振り子を動かす準備を進めていきましょう。



4. Rigidbodyを追加して物理挙動を設定

振り子の重り(PendulumSphere)に物理挙動を設定することで、Unityの物理エンジンを使ったリアルな動きを再現できます。ここでは、Rigidbodyを追加し、必要な設定を行う方法を解説します。


1. Rigidbodyを追加する

  1. ヒエラルキー(Hierarchy)ウィンドウで「PendulumSphere」を選択します。
  2. インスペクター(Inspector)ウィンドウの「Add Component」ボタンをクリックします。
  3. 「Rigidbody」と検索し、結果に表示された「Rigidbody」を選択して追加します。
    これで「PendulumSphere」に物理挙動を追加できます。

2. Rigidbodyの設定

追加されたRigidbodyに、以下の設定を行います。

  1. Mass(質量)
    • 初期値は1ですが、振り子の動きを強調するために「100」に変更します。
  2. Use Gravity(重力の使用)
    • デフォルトでチェックが入っています。このままにしておきましょう。
  3. Freeze Rotation(回転の固定)
    • Rigidbodyの「Constraints」項目を開きます。
    • Freeze Rotation」の「X」と「Z」にチェックを入れます。これにより、振り子がY軸を中心にのみ回転するようになります。
  4. Freeze Position(位置の固定)
    • 同じく「Constraints」で、「Freeze Position」の「Y」にチェックを入れます。これにより、重りが上下方向に動かなくなります。

3. 設定が正しいか確認

  • Rigidbodyが正しく追加されていることを確認してください。
  • 設定が適切に反映されていない場合、振り子が予期せぬ動きをする可能性がありますので注意しましょう。

これで、PendulumSphereに物理挙動を持たせる準備が完了しました。次は、支点(TopCube)にヒンジジョイントを追加して、振り子の動きを作成していきます!



5. ヒンジジョイントを設定する

ヒンジジョイント(Hinge Joint)を使うと、オブジェクトを固定点を中心に回転させることができます。ここでは、「TopCube」にヒンジジョイントを設定し、振り子の動きを作る手順を解説します。


1. ヒンジジョイントを追加

  1. ヒエラルキー(Hierarchy)ウィンドウで「TopCube」を選択します。
  2. インスペクター(Inspector)ウィンドウで「Add Component」ボタンをクリックします。
  3. 検索ボックスに「Hinge Joint」と入力し、リストから「Hinge Joint」を選択します。

2. ヒンジジョイントの設定

追加されたHinge Jointに以下の設定を行いましょう。

  1. Axis(回転軸)
    • デフォルトでは「X: 1」となっていますが、「Z: 1」に変更します。
      これにより、振り子がZ軸を中心に揺れるようになります。
  2. Connected Body(接続対象)
    • 「Connected Body」に「PendulumSphere」をドラッグ&ドロップします。
      これで振り子本体が支点に接続されます。

3. Rigidbodyの調整(必要に応じて)

Hinge Jointを追加すると、TopCubeにも自動的にRigidbodyが追加されます。以下の設定を確認して調整してください。

  1. Use Gravity(重力の使用)
    • チェックを外します。TopCubeは固定点なので、重力の影響を受ける必要がありません。
  2. Constraints(拘束)
    • TopCubeが動かないように、「Freeze Position」と「Freeze Rotation」のすべてにチェックを入れてください。



6. 振り子を動かしてみよう

いよいよ設定した振り子を動かしてみましょう!Unityエディタのシミュレーション機能を使って、振り子がどのように動くかを確認していきます。


1. シーンを保存する

まず、現在のシーンを保存しておきましょう。設定を保存することで、編集内容が失われることを防ぎます。

  1. Unityエディタの上部メニューで「File」→「Save」または「Save As」を選択します。
  2. シーンに「PendulumScene」などの名前を付けて保存します。

2. シミュレーションを開始する

  1. Unityエディタの上部にある「Play」ボタン(▶️アイコン)をクリックします。
  2. シーンが再生され、振り子の動きを確認できます。

3. 振り子を動かしてみる

  1. シミュレーション中に、ヒエラルキーウィンドウで「TopCube」を選択します。
  2. インスペクター(Inspector)ウィンドウの「Transform」コンポーネント」で「Position」や「Rotation」を調整してみてください。
    • TopCubeの位置をずらすことで、PendulumSphereが揺れ始めます。

4. 動作を確認するポイント

  • 振り子がスムーズに揺れているか確認します。
  • TopCubeを動かすと、PendulumSphereが自然に揺れるはずです。
  • 振り子が回転せずに停止している場合、以下の設定を再確認してください:
    • Hinge JointのConnected Bodyが正しく設定されているか。
    • RigidbodyのMassやConstraintsの設定が正しいか。

5. シミュレーションを終了する

シミュレーションを終了するには、もう一度「Play」ボタンをクリックします。これでシーンは編集モードに戻ります。


これで振り子のシミュレーションが完了です!自分だけのオリジナル振り子を作って楽しんでみてください!



7. トラブルシューティング

振り子が思ったように動かない場合は、以下のチェックリストを参考に問題を解決してみましょう。


問題 1: 振り子が揺れない

解決方法:

  1. Connected Bodyの設定を確認
    • Hinge Jointの「Connected Body」に「PendulumSphere」が正しく設定されているか確認してください。
    • 設定されていない場合、PendulumSphereをドラッグ&ドロップで設定しましょう。
  2. Rigidbodyの設定を確認
    • PendulumSphereにRigidbodyが追加されているか確認してください。
    • Mass(質量)が小さすぎると動きが弱くなるため、適切な値(例: 100)に設定しましょう。
  3. Axisの設定を確認
    • Hinge Jointの「Axis」の値が「Z: 1」になっているか確認してください。他の値になっていると、振り子が正しい方向に動きません。

問題 2: 振り子が予期しない方向に動く

解決方法:

  1. Hinge JointのAxis設定が適切か確認
    • Z軸以外の値に1が設定されていると、意図しない方向に回転する場合があります。Z: 1、他の軸: 0に設定しましょう。
  2. TopCubeのTransformが正しい位置にあるか確認
    • TopCubeの位置がずれていると、PendulumSphereの動きが不自然になります。TopCubeの中心とPendulumSphereが一直線になるように調整してください。

問題 3: 振り子が途中で止まってしまう

解決方法:

  1. Use Gravityの設定を確認
    • PendulumSphereのRigidbodyで「Use Gravity」にチェックが入っていることを確認してください。これがオフになっていると、振り子が自然な動きをしません。
  2. ConstraintsのFreeze設定を確認
    • PendulumSphereの「Freeze Rotation」で不要な軸にチェックが入っていないか確認してください。振り子が回転できるのはY軸だけです。

問題 4: 振り子が爆発的に動く(不安定な挙動)

解決方法:

  1. RigidbodyのMassが適切か確認
    • Massの値が極端に大きいまたは小さいと、不安定な挙動になる場合があります。適度な値(例: 100)を設定しましょう。
  2. Hinge Jointの設定を見直し
    • 「Spring」や「Damping」を使用している場合、値が高すぎると動きが不安定になります。デフォルト値にリセットして動作を確認してみてください。

問題 5: Unityエディタでエラーが表示される

解決方法:

  1. コンソールを確認
    • Unityのコンソールウィンドウでエラーメッセージを確認してください。エラー内容に応じた修正を行います。
    • 例えば「NullReferenceException」の場合、Connected Bodyが設定されていない可能性があります。
  2. すべての設定を再確認
    • Rigidbody、Hinge Joint、Transformなど、すべての設定項目を一つずつチェックしてください。

振り子がうまく動かない場合でも、設定項目を順番に見直すことでほとんどの問題は解決できます。焦らずに原因を特定して、修正していきましょう!設定が整ったら、改めてシミュレーションを試してみてください。



8. まとめと応用のアイデア


まとめ

今回の記事では、Unityを使ってヒンジジョイントを活用した振り子の作り方を解説しました。手順を振り返ってみましょう:

  1. オブジェクトの配置: 支点(TopCube)と重り(PendulumSphere)を作成して配置。
  2. Rigidbodyの設定: 振り子に物理挙動を持たせるためにRigidbodyを追加し、必要な調整を実施。
  3. ヒンジジョイントの追加: 支点(TopCube)にHinge Jointを追加して振り子を接続。
  4. 動作確認: Unityエディタの「Play」機能で振り子の動きをシミュレーション。

これらのステップを通じて、Unityでの物理エンジンの基礎を学びながら、振り子の動きを再現できたはずです!


応用のアイデア

振り子をさらに発展させて、自分だけのユニークなプロジェクトに挑戦してみましょう!

  1. 見た目のカスタマイズ
    • オブジェクトの形状を変更してみましょう。例: キューブやカプセルなど。
    • マテリアルを適用して色や質感を変更し、よりリアルな見た目を演出。
  2. 振り子の動きを応用
    • 振り子を使ったシンプルなゲームを作成。例: タイミングよく振り子を避けるアクションゲーム。
    • 複数の振り子を組み合わせて、ドミノ倒しやチェーンリアクションを作る。
  3. 物理エンジンのさらなる活用
    • 振り子の支点を動かして、異なる動きを観察。
    • Spring JointやConfigurable Jointを追加して、振り子の動きを複雑化。
  4. スクリプトで動きを制御
    • 振り子の動きをスクリプトで制御して、特定のタイミングで揺れるようにする。
    • マウスクリックやキーボード入力で振り子を操作できる仕組みを追加。
  5. インタラクティブな要素の追加
    • プレイヤーが振り子の動きを変えられるUIやボタンを追加。
    • 力学シミュレーションの要素を取り入れて学習ツールとして活用。

Unityでは、物理エンジンを活用することで、さまざまなリアルな動きを簡単に再現できます。今回の振り子を基礎として、次はもっと複雑な物理システムやインタラクティブな要素に挑戦してみましょう。ぜひ、楽しみながらUnityの可能性を広げてください!



よくある質問

Q
Rigidbodyが正しく動作しません。どうすればいいですか?
A

Rigidbodyの「Mass」や「Use Gravity」の設定を確認してください。また、Freeze項目の設定も影響することがあります。

Q
ヒンジジョイントが動作しないのはなぜですか?
A

「ConnectedBody」が正しく設定されているか確認してください。また、Hinge Jointの「Axis」設定が適切かも確認しましょう。

Q
他の形状で試してもいいですか?
A

もちろん可能です!キューブやカプセルなど、さまざまな形状で試してみてください。