UnityUnityメモ

UnityでHinge Jointを活用!初心者向けバットの振る動きを作る方法

Unity

1. はじめに

こんにちは!今回はUnity初心者の方でも簡単にできる、「バットを振る動き」の作り方をご紹介します。このチュートリアルでは、Unityの物理エンジンに含まれる Hinge Joint という便利な機能を使って、シンプルかつ直感的な動きを作っていきます。

「Hinge Jointって何?」と思う方もいるかもしれませんが、これは簡単に言うと、ドアの蝶番のような役割をする機能です。特定の軸を中心にオブジェクトが回転する動きを再現できます。たとえば、ブランコやドア、振り子のような動きをUnity上で手軽に作ることができます。


これから作る動きは、野球ゲームやアクションゲームの開発にも応用できる基礎的なスキルです。Unity初心者の方でも理解しやすいように、一つひとつ丁寧に説明していくので、安心してくださいね。

それでは、Unityでバットを振る動きを一緒に作っていきましょう!

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



2. プロジェクトの準備

Unityでバットを振る動きを作るには、まずプロジェクトの準備をしましょう。ここでは、新規プロジェクトの作成方法と基本設定について説明します。


2.1 新規プロジェクトを作成する

  1. Unity Hubを起動
    Unityを起動すると最初にUnity Hubが開きます。ここからプロジェクトを管理したり、新しいプロジェクトを作成できます。
  2. 新しいプロジェクトを作成
    Unity Hubの「New Project(新しいプロジェクト)」ボタンをクリックします。
  3. テンプレートを選択
    テンプレート一覧が表示されるので、3D を選びます。バットを振る動きは3D空間での動作が必要なので、3Dテンプレートが最適です。
  4. プロジェクト名を入力
    プロジェクト名を入力します(例: SwingingBatProject)。保存先を指定して「Create Project(プロジェクトを作成)」をクリックします。
  5. プロジェクトが開く
    数秒から数分待つと、新しいプロジェクトが自動的に開きます。Unityエディタが表示されたら準備完了です!

2.2 プロジェクトの基本設定を確認する

新しいプロジェクトを作成したら、基本的な設定を確認します。これにより、作業中のトラブルを防ぐことができます。

  1. Unityバージョンを確認
    プロジェクトの右上に表示されているUnityバージョンを確認しましょう。本チュートリアルはUnity 2021.3 LTS以降を推奨します。
  2. シーンを保存する
    作業を始める前に、現在のシーンを保存しておきます。
    • Unityメニューから「File」 > 「Save As」を選びます。
    • 名前を入力(例: MainScene)して保存します。これで進行中の作業が失われにくくなります。
  3. プロジェクトのフォルダ構成を整理
    プロジェクトウィンドウで右クリックして、以下のフォルダを作成すると便利です。
    • Scripts:スクリプトを保存するフォルダ
    • Prefabs:プレハブを保存するフォルダ
    • Materials:素材を保存するフォルダ
  4. Main CameraとLightの確認
    デフォルトでシーンに追加されているMain CameraDirectional Lightが正しく配置されているか確認してください。
    • Main Cameraがオブジェクト全体を映す位置にあるかチェック。
    • Directional Lightでシーンが明るくなるように調整。

これでプロジェクトの準備は完了です!次は、実際にシーンにバットの形を作る工程に進みましょう。準備が整っていると後の作業がスムーズに進むので、しっかりチェックしてくださいね!



3. バットの基本形状を作る

まず、バットの基本となる形状を作りましょう。Unityでは、3Dオブジェクトの「Cylinder(円柱)」を使用して、バットの形状を再現します。以下の手順で進めてください。


1. Cylinderオブジェクトを追加する

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. 表示されたメニューから「3D Object」→「Cylinder」を選びます。
  3. シーンビューに円柱型のオブジェクトが追加されます。

💡 ポイント
「Cylinder」はバットの形状に適した基本オブジェクトです。他の形状でも試せますが、今回はCylinderを使います。


2. Cylinderの名前を変更する

  1. ヒエラルキーウィンドウで追加したCylinderを選択します。
  2. 名前を「Bat」に変更しておきましょう。
    • 名前を変更することで、プロジェクト内でオブジェクトを簡単に識別できます。

3. Cylinderのサイズを調整する

デフォルトのCylinderはそのままだとバットには見えません。インスペクター(Inspector)ウィンドウを使って形状を調整します。

  1. ヒエラルキーウィンドウで「Bat」を選択します。
  2. インスペクターウィンドウの「Transform」コンポーネントを見つけます。
  3. 以下の設定を入力してください:
    • Position: (0, 1, 0)
      → オブジェクトを地面の少し上に移動します。
    • Scale: (1, 3, 1)
      → 円柱を縦に細長くして、バットらしい形状にします。

⚙️ 設定例

  • Position
    X: 0, Y: 1, Z: 0
  • Scale
    X: 1, Y: 3, Z: 1

4. 完成した形状を確認する

設定を反映すると、細長い円柱がシーンビューに表示されます。これがバットの基本形状です!


補足情報

バットに色を付けたり、マテリアルを追加して質感を変更することで、よりリアルな見た目にすることもできます。これについては、別の記事で詳しく解説します。


これで、バットの基本形状が完成しました!次は、このバットを動かすために「Hinge Joint」を設定していきましょう。



4. Hinge Jointの追加と設定

バットを振る動きを実現するためには、Hinge Jointを使用します。Hinge Jointは、物体が特定の軸を中心に回転する動きを再現できる便利なコンポーネントです。ここでは、CylinderにHinge Jointを追加し、設定する手順を詳しく解説します。


1. Hinge Jointを追加する

まず、バットとして使うCylinderにHinge Jointを追加します。

  1. シーンビューまたはヒエラルキーウィンドウで、作成したCylinderを選択します。
  2. インスペクターウィンドウに移動し、「Add Component」ボタンをクリックします。
  3. 検索バーに「Hinge Joint」と入力し、表示されたコンポーネントを選択して追加します。

これで、CylinderにHinge Jointが追加されます!


2. AnchorとAxisの設定

次に、バットの回転の中心点と回転軸を設定します。これを行うことで、バットが正確にスイングできるようになります。

  1. Anchorの設定
    Anchorは、回転の基点となる位置です。バットの下端を基点にするため、以下の設定を行います:
    • Anchor: (0, -0.5, 0)
    この設定により、バットの下端が固定され、そこを軸にして回転する動きになります。
  2. Axisの確認
    Hinge JointのAxisは、回転軸を決めるための設定です。デフォルトでは (1, 0, 0) が設定されており、X軸を中心に回転します。このままで問題ありませんが、必要に応じて変更することも可能です。

3. Use Springの設定

バットをクリックで振れるようにするために、「Use Spring」の設定を有効にします。

  1. Use Springにチェックを入れる
    インスペクターウィンドウの「Hinge Joint」セクションで、「Use Spring」のチェックボックスをオンにします。
  2. Springの詳細設定
    「Spring」のセクションで以下の値を設定してください:
    • Spring: 30000
      この値がバットを元の位置に戻す力の強さを決めます。
    • Damper: 800
      この値は、スイングの際の振動をどれだけ抑えるかを設定します。
    • Target Position: -60
      バットを振る際の目標位置(角度)を指定します。

これで、Hinge Jointによる基本的な設定は完了です!


チェックポイント

  • Anchorがバットの下端に設定されていることを確認してください。
  • SpringとDamperの値はシーンの状況に応じて微調整することをおすすめします。

これで、バットがスイングするための準備は整いました。次はスクリプトを作成して、クリック操作でバットを振れるようにしていきましょう!



5. スクリプトで動きを制御する

さて、ここからはスクリプトを使ってバットの振る動きを制御する部分を解説します!これをしっかり設定すれば、クリック一つでバットを振ることができるようになりますよ。


スクリプトを作成する

  1. プロジェクトウィンドウを開く
    Unityエディターの下部にある「Project」ウィンドウで空白部分を右クリックします。
  2. 新しいスクリプトを作成
    メニューから「Create」 > 「C# Script」を選択し、スクリプトを作成します。
  3. スクリプト名を設定
    スクリプト名を「SwingStick」と入力してEnterキーを押します。これで新しいスクリプトファイルが生成されます。

スクリプトのコードを書く

作成した「SwingStick」スクリプトをダブルクリックして、スクリプトエディタ(Visual Studioなど)で開きます。以下のコードを入力してください:

using UnityEngine;

public class SwingStick : MonoBehaviour
{
    HingeJoint hj;
    JointSpring sp;
    public float beginPos;
    public float shotPos;

    void Start()
    {
        // Hinge Jointの取得とSpringの設定
        hj = GetComponent<HingeJoint>();
        sp = hj.spring;
    }

    void Update()
    {
        // マウス左クリックでバットを振り始める
        if (Input.GetMouseButton(0))
        {
            sp.targetPosition = beginPos; // 開始位置に設定
            hj.spring = sp;
        }

        // マウス左クリックを離すとバットを振る
        if (Input.GetMouseButtonUp(0))
        {
            sp.targetPosition = shotPos; // ショット位置に設定
            hj.spring = sp;
        }
    }
}

コードのポイント解説

  • HingeJoint
    バットに追加したHinge Jointコンポーネントを取得しています。これが回転動作を司る重要な部分です。
  • JointSpring
    Hinge JointのSpring機能を使って、動きを柔軟にコントロールします。
  • Input.GetMouseButton(0)
    マウスの左クリックを検出するUnityの標準メソッドです。ここでは「左クリックでバットを振り始める」という動きを実現しています。
  • Input.GetMouseButtonUp(0)
    左クリックを離したときの動作を検出します。このタイミングでバットを振る動きを設定しています。

スクリプトをオブジェクトにアタッチする

スクリプトを書き終えたら、次はスクリプトをUnity内のオブジェクトにアタッチします。

  1. スクリプトを選択
    Projectウィンドウで「SwingStick」スクリプトを探します。
  2. Cylinderにドラッグ&ドロップ
    ヒエラルキー(Hierarchy)ウィンドウでCylinderを選択し、そこに「SwingStick」スクリプトをドラッグ&ドロップします。

スクリプトの変数を設定する

  1. Cylinderを選択
    ヒエラルキーでCylinderをクリックします。
  2. インスペクターウィンドウで設定
    • Begin Pos: 120
    • Shot Pos: -60

これらの値は、バットを振る位置の開始点と終点を指定しています。自由に変更して、動作を調整することもできます。


これで、スクリプトで動きを制御する準備は完了です!「Play」ボタンを押して動作を確認してみましょう。左クリックを押すとバットが振り始め、離すと勢いよく振り切る動きが再現されるはずです!



6. テストと調整

バットを振る動きの設定が完了したら、いよいよ動作確認を行います!以下の手順で、ゲームを実行して調整してみましょう。


① ゲームを実行して動作を確認

  1. Unityエディタの上部にある「Play」ボタンをクリックします。
    ゲームが実行され、シーンが動作する状態になります。
  2. シーンビューのバットを見て、マウスの左クリックを押して離してみましょう。
    • 左クリックを押したとき、バットがスイングの準備動作をします。
    • 左クリックを離すと、バットが素早く振られます。
  3. 思い通りに動作しない場合は、以下のポイントをチェックしてみてください:
    • バットが動かない場合:Hinge Jointが正しく設定されているか、スクリプトがアタッチされているか確認します。
    • スイングが不自然な場合:Spring値やDamper値を調整してみましょう。

② Hinge Jointのパラメータを調整する

動きが理想と異なる場合、Hinge Jointのパラメータを変更することで改善できます。

  1. Anchorの位置
    インスペクターでHinge Jointの「Anchor」の値を変更して、スイングの基点を調整します。例えば、(0, -0.5, 0) から (0, -0.7, 0) にすると、バットの固定位置が少し下に移動します。
  2. Use Springの設定
    • 「Spring」の値を増やすと、バットの振りが力強くなります。
    • 「Damper」の値を減らすと、振りのスムーズさが増します。
    • 初期値(Spring: 30000, Damper: 800)を基準に調整してください。
  3. Target Position
    バットのスイング位置を調整するには「Target Position」の値を変更します。例えば、-60を-45にすると、スイングの角度が浅くなります。

③ スクリプトの微調整

スクリプトが正しく動作していても、動きが気に入らない場合はスクリプトの数値を変更できます。

  • beginPosshotPos の値を変更して、スイングの開始位置と終了位置を調整しましょう。
  • 以下の例を参考に、値を調整してみてください:csharpコードをコピーするpublic float beginPos = -45f; // スイング開始位置 public float shotPos = 30f; // スイング終了位置

④ 再テスト

変更が完了したら、再度「Play」ボタンをクリックして動作を確認します。動作を繰り返しテストして、満足のいく結果が得られるまで調整を続けてください。


これでテストと調整は完了です!慣れてくると、SpringやDamperの設定、スクリプトの数値変更などもスムーズに行えるようになります。自分なりのカスタマイズを加えて、理想の動きを実現してくださいね!



7. まとめ

今回は、Unityで「Hinge Joint」と「Cylinder」3Dオブジェクトを使って、バットを振る動きを作る方法を解説しました。Unityの物理エンジンを活用することで、スクリプトだけでなく、コンポーネントを組み合わせて動きを再現できるのが魅力ですよね。


具体的には、以下の手順で作成しました:

  1. Cylinderの作成と設定
    バットの役割を果たすオブジェクトをシーンに配置し、形状やサイズを調整しました。これにより、見た目にもリアルなバットが完成しました。
  2. Hinge Jointの追加
    バットを振る動きの基盤となるHinge Jointを追加し、AnchorやAxis、Use Springの設定を行いました。Hinge Jointを正しく設定することで、指定した軸を中心に自然な振りを再現できました。
  3. スクリプトによる動きの制御
    スクリプトを使って、マウスのクリックに応じてバットが振れるようにしました。スプリングのTarget Positionを調整することで、開始位置とスイング位置を制御しました。

これらを組み合わせることで、バットを振るという動作をシンプルかつ効果的に再現することができました。

このチュートリアルで得た知識は、スポーツゲームやアクションゲームの制作にも応用できます。例えば、スイングするバットを応用して剣やハンマーの動きを作ったり、Hinge Jointの代わりにConfigurable Jointを使うことでさらに複雑な動きを追加することも可能です。

ゲーム開発の第一歩として、このようなシンプルな機能から始めると学びが深まりますよ。次は、バットの当たり判定やスコアシステムなどを追加して、より本格的なゲームを作ってみてください!Unityでの開発を楽しみながら、ぜひ創造力を広げていきましょう!



よくある質問

Q
UnityのHinge Jointって何ですか?
A

Hinge Jointは、物体を特定の軸に沿って回転させるためのコンポーネントです。例えば、ドアや振り子のような動きを再現できます。

Q
スクリプトが正しく動作しません。どうしたらいいですか?
A

スクリプトがCylinderにアタッチされているか確認してください。また、スペルミスやHinge Jointの設定をもう一度見直してみましょう。

Q
他のオブジェクトにも同じ動きを適用できますか?
A

はい、Hinge Jointを使えば、さまざまなオブジェクトで回転動作を作ることができます。同じスクリプトを利用して調整可能です。

おすすめのアセット

Baseball Stadiumは、リアルな野球スタジアムを再現した3D環境アセットです。プロ仕様のスタジアムデザインで、ゲームやシミュレーションに最適です。

特徴としては、詳細なスタジアム構造や観客席、ベンチ、フィールドなど、実際の野球場にあるすべての要素が含まれています。高品質なテクスチャとライティングで、リアルな雰囲気を演出します。また、デイナイトサイクルにも対応しており、時間帯によってスタジアムの雰囲気が変わる仕様になっています。