UnityUnityメモ

Unity初心者必見!ヒンジジョイントで簡単に作る開閉可能な扉

Unity

1. はじめに

こんにちは!Unity初心者のみなさん、今回は「ヒンジジョイントを使った扉の作り方」を一緒に学んでいきましょう。この方法を使えば、ゲーム内でプレイヤーが押して開ける扉を簡単に作ることができます。

扉を開けたり閉めたりする機能は、アクションゲームやアドベンチャーゲームなど、さまざまなジャンルでよく使われています。例えば、プレイヤーが建物に入るシーンや謎解き要素のあるステージで、こうした仕組みを活用すればゲームがもっと面白くなりますよね。


この記事では、Unityを使って次のような手順で扉を作ります:

  1. 床と扉のオブジェクトを作成
  2. ヒンジジョイントで扉が回転する仕組みを設定
  3. RigidbodyやSpringで扉の動きを調整
  4. プレイヤーを操作して実際に扉を押してみる

わかりやすく、ステップごとに解説していくので、Unity初心者の方でも安心してください!さあ、早速始めましょう!

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



2. プロジェクトの準備

Unityで「ヒンジジョイントで押し開ける扉」を作る前に、まず新しいプロジェクトを準備しましょう。ここでは、Unityの新規プロジェクトの作成手順と基本的な設定について説明します。


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

  1. Unity Hubを開きます。
  2. 「新規プロジェクト(New Project)」 ボタンをクリックします。
  3. テンプレートは 「3D」 を選択します。
  4. プロジェクト名を入力しましょう。例えば、HingeDoorProject とします。
  5. 保存場所を指定して、 「Create Project」 をクリックします。
  6. 少し待つと新しいプロジェクトが開きます!

② 作業環境を整える

Unityでは効率的に作業するために、以下を事前に準備しておくと便利です。

  • スクリプト用のフォルダ作成
    プロジェクトウィンドウの Assets フォルダを右クリックして 「Create」→「Folder」 を選び、名前を Scripts に変更します。
  • 素材やアセットの準備
    必要であれば、Unity Asset Storeやインターネットから無料素材をダウンロードしておきましょう。

これでプロジェクトの準備は完了です!次はシーンにオブジェクトを追加して、実際に扉の制作を進めていきましょう。



3. 扉のベースを作る

まずは、ゲームの舞台となる床と扉の基礎部分を作りましょう。このセクションでは、Unityのヒエラルキーウィンドウを使って簡単にオブジェクトを作成して配置する方法を説明します。

1. 床を作成する

  1. ヒエラルキーウィンドウでオブジェクトを追加
    • Unityの画面右上にあるヒエラルキーウィンドウで右クリックします。
    • 表示されたメニューから3D ObjectPlaneを選びます。
    • 作成されたPlaneがシーンビューに表示されます。
  2. 名前と位置の設定
    • Planeを選択し、インスペクターウィンドウで名前を「Floor」に変更します。
    • TransformコンポーネントのPosition(0, 0, 0)に設定します。これで床が正しい位置に配置されます。
  3. 確認
    • シーンビューで床が水平に広がっていることを確認しましょう。

2. 扉のオブジェクトを作成する

  1. Cubeを追加
    • 再びヒエラルキーウィンドウで右クリックし、3D ObjectCubeを選びます。
  2. 名前とサイズの設定
    • Cubeを選択し、名前を「Door」に変更します。
    • インスペクターウィンドウTransformScaleを以下のように変更します:
      • X: 2
      • Y: 3
      • Z: 0.1
        これで、ドアらしい縦長の形状になります。
  3. 位置の設定
    • TransformPositionを以下の値に変更します:
      • X: 0
      • Y: 1.5
      • Z: 0
        扉が床の上に浮いた位置に来ます。
  4. 確認
    • シーンビューで扉が床の上に立っている状態になっているか確認してください。

これで、扉のベースとなる床とドアが完成しました。次のセクションでは、扉にヒンジジョイントを追加して、開閉できるようにする設定を行います!



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

ヒンジジョイントを使って、扉が開閉できるように設定します。このセクションでは、ヒンジジョイントの追加方法や細かい設定について詳しく解説します。


4-1. ヒンジジョイントの追加

まずは、扉のオブジェクトにヒンジジョイントを追加しましょう。

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

これで、扉にヒンジジョイントが追加されました。次に、設定を変更して扉が正しく動くように調整します。


4-2. ヒンジジョイントの細かい設定

ヒンジジョイントが正しく動作するように、AnchorやAxisの値を設定します。

  1. Anchorの設定
    扉が左側を軸に回転するように、Anchorを次の値に変更します:
    • Anchor: (-0.5, 0, 0)
    ※ Anchorは、回転軸となる点を設定するものです。この値を調整することで、扉がどこを基準に回転するかを指定できます。
  2. Axisの設定
    扉が縦方向に回転するように、Axisを次の値に変更します:
    • Axis: (0, 1, 0)
    ※ Axisは回転する方向を決定します。この場合、Y軸(1,0,0)に沿って回転させるように設定しています。

4-3. Rigidbodyの追加

ヒンジジョイントを正しく動作させるために、扉に物理演算のRigidbodyコンポーネントを追加します。

  1. ヒエラルキーウィンドウで「Door」を選択します。
  2. インスペクターウィンドウで「Add Component」ボタンをクリックし、「Rigidbody」を選択します。
  3. Rigidbodyの設定で、以下の値を調整します:
    • Mass: 1
    ※ Massは物体の質量を設定する項目です。この値が大きいと重くなり、小さいと軽く動きます。

これで、ヒンジジョイントの設定は完了です!次に進む前に、シーンビューで扉が正しい位置にあり、設定が適切か確認しましょう。

次のセクションでは、Springを使用して扉が自然に閉じる動きを実現します!



5. Springを使った閉じる動きの調整

扉をヒンジジョイントで開閉できるようになりましたが、このままだと扉は自由に開いたままになり、自然な動きが再現できません。次に、扉がスプリングの力で自動的に閉じる動きを設定します。以下の手順で調整を行いましょう。


① Springの有効化

まず、ヒンジジョイントの設定でスプリング機能を有効にします。

  1. 「Door」オブジェクトを選択 ヒエラルキーウィンドウで「Door」をクリックします。
  2. インスペクターウィンドウを確認 「Hinge Joint」コンポーネントが表示されているのを確認してください。
  3. Springの設定を開く 「Hinge Joint」の設定項目にある「Use Spring」というチェックボックスを探します。
  4. チェックを入れる 「Use Spring」にチェックを入れることで、スプリング機能が有効になります。

② Springの値を設定

スプリングの強さとダンパーの値を設定して、扉がスムーズに閉じるように調整します。

  1. Springの強さを設定 「Spring」の項目に数値を入力します。ここでは「5」を入力してみましょう。
    この値が高いほど、扉が閉じる力が強くなります。
  2. Damperの設定 「Damper」の項目に数値を入力します。ここでは「3」を入力してください。
    ダンパーはスプリングの動きを制御し、扉がバウンドしすぎないようにする役割を持ちます。

③ 値の調整ポイント

動きが不自然な場合は、以下の値を調整してみてください。

  • Spring: 扉を閉じる力が強すぎると不自然に感じることがあります。値を小さくして調整しましょう。
  • Damper: ダンパーの値を大きくすると、扉がゆっくり閉じるようになります。好みに応じて調整してください。

以上でスプリングを使った扉の閉じる動きの設定は完了です!



6. プレイヤーの追加と操作方法

扉を開けるには、プレイヤーとなるオブジェクトを追加し、操作できるようにする必要があります。ここでは、プレイヤーとしてCube(立方体)を使用し、移動スクリプトを作成して動かしてみましょう!


1. PlayerCubeの作成

  1. ヒエラルキーウィンドウでCubeを追加
    • ヒエラルキーウィンドウで右クリックし、**「3D Object」→「Cube」**を選びます。
    • 作成されたCubeを選択し、名前を**「PlayerCube」**に変更しましょう。
  2. 位置を設定
    • PlayerCubeを床の上に配置するため、インスペクターウィンドウで**「Transform」→「Position」**を次のように設定します:Position: (0, 0.5, 0)

これでプレイヤーとなるキューブがシーンに追加されました!


2. スクリプトの作成

次に、PlayerCubeを移動させるためのスクリプトを作成します。

  1. スクリプトファイルを作成
    • プロジェクトウィンドウで空いているスペースを右クリックし、**「Create」→「C# Script」**を選びます。
    • 作成したスクリプトに名前を**「CubeMove」**と付けます。
  2. スクリプトにコードを入力
    • CubeMoveスクリプトをダブルクリックして開き、以下のコードを入力します:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeMove : MonoBehaviour
{
    void Update()
    {
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3; // 横移動
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3;   // 縦移動
        transform.position = new Vector3(transform.position.x + dx, transform.position.y, transform.position.z + dz);
    }
}

このコードは、キーボードの矢印キーやWASDキーでキューブを移動できるようにしています。


3. スクリプトをアタッチ

  1. スクリプトをPlayerCubeにアタッチ
    • プロジェクトウィンドウで作成した**「CubeMove」スクリプトを、ヒエラルキーウィンドウの「PlayerCube」**にドラッグ&ドロップします。
  2. 確認
    • PlayerCubeを選択し、インスペクターウィンドウで**「CubeMove」スクリプト**が追加されていることを確認します。

これで、プレイヤーが扉に近づけるようになりました。次は、プレイヤーの移動に応じて扉が自然に開閉するか確認しましょう!



7. プレイして確認する

さて、ここまでで扉の作成、ヒンジジョイントの設定、プレイヤーの操作スクリプトの準備ができましたね!最後に、プレイモードでちゃんと動作するか確認しましょう。


1. プレイモードを開始する

まずはUnityエディターの上部にある「▶(プレイ)」ボタンをクリックして、プレイモードを開始します。

2. PlayerCubeを操作して扉に近づく

  • キーボード操作
    • 矢印キーや「W」「A」「S」「D」キーを使って、PlayerCubeを動かしてみましょう。
    • 例えば「W」キーを押すと前進、「S」キーを押すと後退します。
    • もしCubeが動かない場合は、スクリプトが正しくアタッチされているか確認してください。

3. 扉が押し開けられるか確認

  • PlayerCubeを扉にぶつけるように移動させます。すると、ヒンジジョイントの設定により、扉が自然に押し開けられるはずです。
  • 扉が正しく動作しているか、以下をチェックしてみてください:
    • 扉がスムーズに開閉する
    • 扉が自然な速度で元の位置に戻る(Springの設定が影響します)

4. 動作しない場合の確認ポイント

もし動作に問題がある場合は、以下を確認してみてください:

  • ヒンジジョイントの設定
    AnchorやAxisが正しい値に設定されているかをチェックしてください。
  • Rigidbodyの有無
    Rigidbodyが扉オブジェクトに追加されていないと動きません。
  • スクリプトのエラー
    コンソールウィンドウにエラーメッセージが表示されていないか確認してください。

5. プレイモードを終了する

動作確認が終わったら、「▶(プレイ)」ボタンを再度クリックしてプレイモードを終了しましょう。プレイモード中に行った変更は保存されないので、編集を続ける場合はプレイモードを終了してから行うようにしましょう。


これで、ヒンジジョイントを使った扉が正しく動作するかを確認できました!プレイヤーが扉を開ける仕組みを作れると、ゲーム開発の幅がぐっと広がりますね。次は複数の扉を追加してみたり、鍵をかける仕組みを試してみたりして、さらにスキルを磨いてみましょう!



8. おわりに

お疲れさまでした!今回の記事では、Unityを使ってヒンジジョイントを利用した扉の作成方法を解説しました。床や扉の基本的なオブジェクトの配置から、ヒンジジョイントの設定、スクリプトを使ったプレイヤー操作まで、順を追って説明してきましたが、いかがでしたか?

今回学んだ内容をまとめると以下のようになります:

  1. ヒンジジョイントでリアルな扉の開閉を実現
    UnityのHinge Jointコンポーネントを使えば、簡単に物理的な動きを持ったオブジェクトを作成できます。設定次第で動きの幅やスムーズさを自由に調整できます。
  2. RigidbodyとSpringで自然な動きを追加
    Rigidbodyを使ってオブジェクトに質量を持たせることで、物理的な動きを再現し、SpringやDamperを活用して扉が自然に閉じるようにカスタマイズしました。
  3. スクリプトでインタラクティブ性を強化
    プレイヤーの操作をスクリプトで実装することで、ただの動作する扉から、ゲームに取り入れられる実用的な仕組みへと進化させました。

次のステップ

今回作った扉は、シンプルな動作が特徴ですが、さらに発展させることも可能です。例えば:

  • アニメーションを追加して、よりリアルな動きにする
    Animatorを使えば、ヒンジジョイントに加えて視覚的に洗練された扉を作ることができます。
  • 複数の扉を使ったパズルを設計する
    異なる条件で開閉する複数の扉を配置し、ゲームの一部として活用するのも面白いですね。
  • 音を追加して臨場感を高める
    扉の開閉時に「ギギー」という音や「バタン」という閉まる音を加えることで、よりリアルな体験をプレイヤーに提供できます。

Unityで作れるものは無限大です!このプロジェクトをさらに発展させて、自分だけのゲームを作ってみてください。それでは、楽しいゲーム開発ライフを! 🎮✨



よくある質問

Q
ヒンジジョイントが動かない場合はどうすればいいですか?
A

Rigidbodyが正しく追加されているか、AnchorとAxisの設定が適切か確認してください。

Q
扉がスムーズに閉じないのはなぜですか?
A

SpringやDamperの値を調整して、より自然な動きを目指してください。

Q
PlayerCubeが動かない場合の対処法は?
A

スクリプトが正しくアタッチされているか、Input設定が適切か確認してください。

おすすめのアセット

「Any Doors System」は、Unityでドアの開閉機能を簡単に追加できるテンプレートです。初心者にも使いやすく、複雑なコーディングは必要ありません。ドアの種類も多彩で、回転式ドア、スライド式ドア、ハッチなど、さまざまなドアを設定できます。使い方は簡単で、ドアの種類を選んで設定するだけ。これにより、ゲームやシミュレーションにリアルなドアの動きを簡単に追加できます。ドアを動かすエフェクトや音も含まれており、よりリアルな演出が可能です。