UnityUnityメモ

Unity初心者向け!エレベーターを作ってみよう:自動で上下する仕組みを簡単解説

Unity

はじめに

Unityでゲームを作るとき、ただ歩いたりジャンプしたりするだけでは物足りなく感じることはありませんか?ゲームをもっと面白くするには、仕掛けや演出が必要です。今回紹介するのは、エレベーターの作り方です!
このエレベーターは、プレイヤーが乗ると自動で1階から2階に上昇し、もう一度乗ると2階から1階に下降します。ゲームに動きのある仕組みを加えることで、プレイヤーの体験をより豊かにすることができますよ。

この記事では、Unity初心者の方でも簡単にエレベーターを作れるように、基本から順番に説明していきます。Unityの「ヒエラルキー」や「インスペクター」といった基本的な操作も含めて解説するので安心してください。


エレベーターを作ることで、以下のスキルが身につきます:

  • 3Dオブジェクトの作成と操作
  • スクリプトを使ったオブジェクトの制御
  • プレイヤーとのインタラクションの実装

Unityでのゲーム開発に慣れてくると、エレベーターの仕組みを応用してエスカレーターやトラップ、ドアの開閉など、いろいろな仕掛けを作れるようになります。まずはこの記事の手順に沿って、楽しくエレベーターを作ってみましょう!

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



1. 1階の床を作成

まず、1階の床を作成しましょう。この床は、プレイヤーがエレベーターに乗る前に立つ場所となります。


手順1: 1階の床を作成

  1. ヒエラルキーウィンドウで右クリックします。
    • メニューが表示されるので、**「3D Object」→「Cube」**を選択します。
    • シーンビューに立方体(Cube)が表示されます。
  2. 作成されたCubeを選択し、名前を「FirstFloor」に変更します。
    • 名前を変更することで、後で管理しやすくなります。

手順2: 床の位置とサイズを調整

  1. Inspectorウィンドウを開き、以下の設定を適用します。
    • Position
      • X: -3
      • Y: 0
      • Z: 0
    • Scale
      • X: 3
      • Y: 0.2
      • Z: 3
  2. 上記の設定により、床が適切な大きさと位置に配置されます。
    • X方向に少し左に移動し、Y方向は地面と同じ高さ(0)に設定します。
    • 床の厚みを0.2にし、3×3の正方形の床を作成します。

手順3: 床の外観を変更(オプション)

  1. プロジェクトウィンドウで右クリックして、「Create」→「Material」を選びます。
    • 新しいマテリアルを作成します。
    • マテリアルに「FloorMaterial」という名前を付けます。
  2. マテリアルの色を変更します。
    • Inspectorでマテリアルを選択し、「Albedo」カラーをクリックします。
    • 好きな色(例: 灰色)を設定します。
  3. 「FirstFloor」にマテリアルをドラッグ&ドロップして適用します。
    • 床が設定した色に変更され、視認性が向上します。

これで1階の床が完成です!次にエレベーターを作成していきます。続きを見て、エレベーター作りを進めましょう!



2.エレベーターを作成

次に、プレイヤーが乗って上下するエレベーターを作りましょう。まずは1階の床を基にエレベーターを作成し、見た目を少し変更します。

ステップ1:エレベーターの基になるオブジェクトを作成

  1. ヒエラルキーウィンドウで1階の床「FirstFloor」を複製します
    • 複製するには、「FirstFloor」を右クリック → Duplicate(複製) を選択します。
    • 新しいオブジェクトが生成されるので、名前を「Elevator」に変更します。
  2. 「Elevator」の位置を調整します
    • Inspectorウィンドウで、Positionの値を以下に設定してください。cssコードをコピーするPosition: X = 0, Y = 0, Z = 0
  3. エレベーターの大きさはそのままでOKです。必要に応じて、Scale(スケール)の値を変更してエレベーターのサイズを調整できます。

ステップ2:エレベーターの見た目を変更

エレベーターが床と区別しやすいように、マテリアルを使って色を変更しましょう。

  1. プロジェクトウィンドウで新しいマテリアルを作成します。
    • プロジェクトウィンドウの空白部分を右クリックし、「Create」→「Material」 を選択します。
    • 作成されたマテリアルの名前を「ElevatorMaterial」に変更します。
  2. エレベーターの色を設定します。
    • 「ElevatorMaterial」を選択し、Inspectorで 「Albedo」 の色をクリックして好きな色(例えば青や黄色)を選択します。
  3. エレベーターオブジェクトにマテリアルを適用します。
    • ヒエラルキーウィンドウで「Elevator」を選択し、プロジェクトウィンドウの「ElevatorMaterial」をドラッグ&ドロップで「Elevator」に適用します。

これでエレベーターの基本的な準備が完了しました!次に進む前に、シーンビューでエレベーターが正しい位置にあり、見た目も分かりやすくなっているか確認してください。




3.2階の床を作成

この記事では、1階の床を複製して2階の床を作成する方法を解説します。Unity初心者でも簡単にできるので、一緒に進めていきましょう!

手順

  1. 1階の床を複製する
    まず、ヒエラルキーウィンドウで「FirstFloor」を選択してください。
    次に、右クリックメニューから「Duplicate」を選択するか、キーボードの Ctrl + D (Macの場合は Cmd + D)を押してオブジェクトを複製します。
  2. 名前を変更する
    複製されたオブジェクトの名前を「SecondFloor」に変更します。
    名前を変更することで、オブジェクトを識別しやすくなります。
  3. 位置を調整する
    2階の床を1階の床の上に配置するため、以下のように位置を設定します:
    • Position: X = 3、Y = 3、Z = 0
      Inspectorウィンドウで「Transform」コンポーネントを確認し、上記の値を入力してください。
  4. 大きさを確認する
    1階と同じ大きさで問題ないため、Scale の値は変更する必要はありません。デフォルトのままにしておきましょう:
    • Scale: X = 3、Y = 0.2、Z = 3
  5. 色を変更する(オプション)
    2階の床と1階の床を視覚的に区別したい場合は、マテリアルを変更して色を付けてみましょう:
    • プロジェクトウィンドウで右クリックして「Create」→「Material」を選択します。
    • 作成したマテリアルの名前を「SecondFloorMaterial」に変更します。
    • Inspector で色を設定し、2階の床にドラッグ&ドロップします。

これで、2階の床が完成しました!1階の床と同じサイズや形状にしておくと、エレベーターの動作をテストするときに便利です。



4.プレイヤーの作成と設定

次に、エレベーターに乗って移動するプレイヤーを作成しましょう。このセクションでは、プレイヤーオブジェクトの作成から動作設定まで、初心者でもわかりやすく解説します!


1. プレイヤーオブジェクトの作成

  1. ヒエラルキーウィンドウで右クリックし、メニューから「3D Object」→「Cube」を選択します。
  2. 作成されたCubeの名前を「Player」に変更します。
    • 名前を変更するには、ヒエラルキーでCubeを選択し、F2キーを押して名前を入力するか、Inspectorで「Name」を編集します。

2. プレイヤーの位置と外見を設定

  1. Inspectorで以下の設定を行い、プレイヤーの位置とサイズを調整します。
    • Position: (X = -3, Y = 0.6, Z = 0)
      ※ Yの値を少し高くすることで、床の上に配置されます。
    • Scale: (X = 0.5, Y = 1, Z = 0.5)
      ※ プレイヤーの大きさを小さくし、人物のような形状に近づけます。
  2. マテリアルで色を変更
    • プロジェクトウィンドウで右クリックして「Create」→「Material」を選択します。
    • 作成されたマテリアルの名前を「PlayerMaterial」に変更します。
    • Inspectorで「Albedo」の色を変更し、好みの色(例: 青色)に設定します。
    • Playerオブジェクトに作成したマテリアルをドラッグ&ドロップして適用します。

3. Character Controllerを追加する

プレイヤーを移動可能にするために、「Character Controller」コンポーネントを追加します。

  1. ヒエラルキーで「Player」を選択します。
  2. Inspectorウィンドウの「Add Component」ボタンをクリックします。
  3. Character Controller」と検索して選択します。
  4. Character Controllerの設定はデフォルトのままで問題ありませんが、必要に応じて以下の項目を調整してください。
    • Radius: 0.25 (プレイヤーの幅)
    • Height: 1.0 (プレイヤーの高さ)

これでプレイヤーの作成と基本的な設定は完了です。次は、プレイヤーがエレベーターを検知できるようにするスクリプトを作成していきましょう!



5.エレベーター検知用エリアを作成

エレベーターがプレイヤーを検知し、自動で動き出す仕組みを作成するために、検知用のエリアを作成します。このエリアにプレイヤーが入ることで、エレベーターが上下に動く仕組みを実現します。


ステップ 1: エリア用オブジェクトの作成

  1. ヒエラルキーウィンドウで右クリックし、
    **「3D Object」→「Cube」**を選びます。
    これがエレベーターの検知エリアになります。
  2. 作成されたCubeを選択し、名前を「Area」に変更しましょう。
    名前を付けておくと、後でスクリプトで参照しやすくなります。

ステップ 2: エリアの位置とサイズを調整

  1. Inspectorウィンドウで以下のように調整します。
    • Position:
      • X = 0, Y = 0.6, Z = 0
        ※エレベーターの少し上に配置します。
    • Scale:
      • X = 3, Y = 1, Z = 3
        ※エリアを広げて、プレイヤーが簡単に触れられるようにします。

ステップ 3: トリガー設定を有効化

  1. 「Area」を選択した状態で、Inspectorウィンドウを確認します。
  2. Box Colliderコンポーネントの「Is Trigger」にチェックを入れます。
    これにより、このオブジェクトが他のオブジェクトと物理的に衝突するのではなく、検知できるようになります。

ステップ 4: エリアをエレベーターに関連付け

  1. ヒエラルキーウィンドウで「Area」をドラッグして、「Elevator」の上にドロップします。
    これで、「Area」はエレベーターの子オブジェクトとして設定されます。
  2. 「Area」の位置を再度確認して、エレベーターの動きに追随するように調整しましょう。

ステップ 5: エリアの外観を調整

  1. Areaの外観を透明にして、見た目にはエリアが存在しないようにします。
  2. プロジェクトウィンドウで右クリックして、
    **「Create」→「Material」**を選択し、新しいマテリアルを作成します。
    これに「AreaMaterial」という名前を付けます。
  3. Inspectorウィンドウで以下を設定します:
    • Rendering Mode: Transparent
    • Albedoの色を透明に設定(Alpha値を0にする)。
  4. 作成したマテリアルを「Area」にドラッグ&ドロップして適用します。

これでエレベーターの検知用エリアが完成しました。このエリアにプレイヤーが入ると、スクリプトで設定した動きが実行されるようになります。次のステップでは、スクリプトでこのエリアの動作を制御する方法を解説します!



6.スクリプトを使ったエレベーターの制御

エレベーターを自動で上下させるには、2つのスクリプトを作成します。1つ目はプレイヤーがエレベーターに乗ったことを検知するスクリプト、2つ目はエレベーター自体を上下に動かすスクリプトです。以下では、それぞれのスクリプトを作成し、動作を確認できるように詳しく解説します。


1. プレイヤーのスクリプトを作成する

プレイヤーがエレベーターに乗ったことを検知するスクリプトを作成します。

  1. 新しいスクリプトを作成
    プロジェクトウィンドウを右クリックして、「Create」→「C# Script」を選びます。スクリプトに「PlayerMove」と名前を付けましょう。
  2. 以下のコードを入力 作成したスクリプトを開き、以下のコードを入力します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMove : MonoBehaviour
{
    public GameObject elevator;      // エレベーターオブジェクト
    private float speed = 3.0F;      // プレイヤーの移動速度
    private float rotateSpeed = 3.0F; // プレイヤーの回転速度

    void Update()
    {
        // プレイヤーの移動と回転
        CharacterController controller = GetComponent<CharacterController>();
        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);

        Vector3 forward = transform.TransformDirection(Vector3.forward);
        float curSpeed = speed * Input.GetAxis("Vertical");
        controller.SimpleMove(forward * curSpeed);
    }

    // プレイヤーがエリアに触れたとき
    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.name == "Area")  // エリアに触れたか確認
        {
            ElevatorMove elevatorMove = elevator.GetComponent<ElevatorMove>();

            if (elevatorMove.is2ndFloor == false)  // 1階にいれば上昇
            {
                elevatorMove.MoveUp();
            }
            else if (elevatorMove.is2ndFloor == true)  // 2階にいれば下降
            {
                elevatorMove.MoveDown();
            }
        }
    }
}
  1. スクリプトをアタッチ
    ヒエラルキーで「Player」を選択し、作成した「PlayerMove」スクリプトをドラッグ&ドロップでアタッチします。
    また、「PlayerMove」スクリプト内の elevator フィールドに「Elevator」オブジェクトをアサインします。

2. エレベーターのスクリプトを作成する

エレベーターが1階から2階、または2階から1階へ移動する動きを作成します。

  1. 新しいスクリプトを作成
    プロジェクトウィンドウを右クリックして、「Create」→「C# Script」を選びます。スクリプトに「ElevatorMove」と名前を付けましょう。
  2. 以下のコードを入力 作成したスクリプトを開き、以下のコードを入力します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ElevatorMove : MonoBehaviour
{
    private Vector3 pos;         // 現在の位置を保持
    public bool is2ndFloor;      // 2階にいるかどうかを判定するフラグ

    void Start()
    {
        is2ndFloor = false;     // 最初は1階にいる設定
    }

    // 2階へ上昇する関数
    public void MoveUp()
    {
        StartCoroutine("MoveUpStart"); // コルーチンをスタート
    }

    // 2階に上昇するコルーチン
    IEnumerator MoveUpStart()
    {
        while (pos.y < 3.0f)     // 2階(Y=3.0f)まで移動
        {
            pos = transform.position;   // 現在の位置を更新
            transform.Translate(0, 0.02f, 0);  // 上に少しずつ移動
            yield return new WaitForSeconds(0.01f);  // 0.01秒待機
        }
        is2ndFloor = true;       // 2階に到着したらフラグを更新
    }

    // 1階へ下降する関数
    public void MoveDown()
    {
        StartCoroutine("MoveDownStart"); // コルーチンをスタート
    }

    // 1階に下降するコルーチン
    IEnumerator MoveDownStart()
    {
        while (pos.y > 0.0f)     // 1階(Y=0.0f)まで移動
        {
            pos = transform.position;   // 現在の位置を更新
            transform.Translate(0, -0.02f, 0); // 下に少しずつ移動
            yield return new WaitForSeconds(0.01f);  // 0.01秒待機
        }
        is2ndFloor = false;      // 1階に到着したらフラグを更新
    }
}
  1. スクリプトをアタッチ
    ヒエラルキーで「Elevator」を選び、作成した「ElevatorMove」スクリプトをドラッグ&ドロップでアタッチします。

ここまでで、プレイヤーがエレベーターに乗ると自動で上下する仕組みが完成しました!
次は、シーンを再生して、以下のポイントを確認してみましょう。



エレベーターのテストプレイ

ここまでの手順が完了したら、作成したエレベーターが正しく動作するかどうかを確認してみましょう!以下の手順でテストプレイを進めてください。

1. シーンを保存する

まず、作成したシーンを保存しておきましょう。

  • メニューバーから「File」→「Save As」を選び、適当な名前(例:ElevatorScene)を付けて保存します。

2. ゲームを実行する

Unityエディターの上部にある「再生ボタン(▶)」をクリックして、ゲームを実行します。
ポイント: ゲームを実行する前に、エラーがないかConsoleウィンドウを確認してください。エラーがある場合、スクリプトやオブジェクトの設定を見直してください。

3. プレイヤーを動かしてエレベーターに乗る

  • 操作方法: キーボードの「WASD」キー、または矢印キーでプレイヤーを動かします。
  • プレイヤーが「エレベーター」に近づき、「Area」のトリガー内に入ると、エレベーターが自動的に動き出すはずです。

4. エレベーターの動作を確認

次のポイントを確認しましょう:

  • 1階から2階への移動: エレベーターがスムーズに上昇し、2階に到達するか。
  • 2階から1階への移動: 再びエレベーターに乗ったときに、エレベーターが下降するか。
  • プレイヤーの動作: エレベーターの移動中に、プレイヤーがスムーズにエレベーターと一緒に動いているか。

5. 問題が発生した場合の確認ポイント

もし動作が期待通りでない場合は、以下をチェックしてください:

  1. スクリプトの設定
    • PlayerMoveスクリプトのelevatorフィールドに正しいエレベーターオブジェクトが設定されているか。
    • ElevatorMoveスクリプトが正しくエレベーターにアタッチされているか。
  2. 「Area」のトリガー設定
    • 「Area」オブジェクトの「Is Trigger」にチェックが入っているか。
    • 「Area」がエレベーターの子オブジェクトになっているか。
  3. Transformの設定
    • エレベーターや床オブジェクトの位置(Position)と大きさ(Scale)が適切に設定されているか。

6. 再調整後の再テスト

設定を修正したら、再度シーンを実行してテストしてください。正しく動作するまで調整を繰り返します。テストが成功したら、あなたのエレベーターは完成です!


これでエレベーターの動作確認が完了しました。次は、さらに複雑な動作や他の機能を追加して、自分だけのオリジナルエレベーターを作りましょう!



まとめ

この記事では、Unityを使ってプレイヤーがエレベーターに乗ると自動で1階と2階を移動する仕組みを作る方法を解説しました。以下のステップを通じて、エレベーターの基本的な動作を実現しました。


  1. 床とエレベーターの作成
    ヒエラルキーウィンドウを活用し、1階と2階の床を作成しました。エレベーターとなるオブジェクトには色を変更し、視覚的にも区別しやすくしました。
  2. プレイヤーの作成と基本設定
    Character Controllerを使ってプレイヤーが自由に動けるようにし、エレベーターに乗るアクションが可能な状態にしました。
  3. エレベーターの制御スクリプト
    スクリプトを使ってエレベーターが上下に動く仕組みを実装しました。コルーチンを活用することでスムーズな動きが実現できました。
  4. 検知エリアの設置
    エレベーターがプレイヤーの乗車を検知するエリアを作成しました。「Is Trigger」を有効にすることで、エレベーターとプレイヤーの動作が連動する仕組みを作りました。

この記事を通じて、Unity初心者でも基本的なオブジェクト作成やスクリプトの使い方、そして物理的な動作を取り入れたゲームシーンの作り方を学べたのではないでしょうか。今回のエレベーターを応用すれば、複数階層の建物を作ったり、異なる速度や動作を持つエレベーターを実装したりと、さまざまな工夫が可能です。

ぜひ、この記事をもとに、オリジナルのゲーム開発にチャレンジしてみてください!「あれができたら面白そう!」というアイデアをUnityで形にしていきましょう。楽しいゲーム開発ライフを応援しています!



よくある質問(FAQ)

Q
エレベーターが動かない場合、どうすればいいですか?
A

エレベーターが動かない場合、以下のポイントを確認してください。

  • スクリプトのアタッチ: 「PlayerMove」スクリプトがプレイヤーオブジェクトに、「ElevatorMove」スクリプトがエレベーターオブジェクトに正しくアタッチされているか確認してください。
  • Trigger設定: 「Area」オブジェクトの「Is Trigger」にチェックが入っているか確認してください。
  • エラーの確認: コンソールウィンドウにエラーが表示されていないかチェックしてください。エラー内容を確認して修正しましょう。
Q
複数のエレベーターを作成する場合のポイントは?
A

複数のエレベーターを作成する場合、それぞれのエレベーターに独立したスクリプトと検知エリアを作成することをおすすめします。以下の点に注意してください:

  • ユニークな名前を使用する: エレベーターやエリアオブジェクトの名前が他のオブジェクトと重複しないようにしてください。
  • スクリプトの柔軟性を高める: スクリプト内でエレベーターごとに動作を分岐できるよう、複数の「ElevatorMove」スクリプトを利用しましょう。また、必要に応じてPrefab(プレハブ)を使用すると効率的です。
Q
スクリプトの応用で別の動きを作る方法を教えてください。
A

エレベーターのスクリプトを応用すれば、以下のような動作を簡単に追加できます:

  • 停止ボタンの追加: ボタンを配置し、ボタンが押されたときにエレベーターの動きを一時停止するスクリプトを追加する。
  • フロア数の拡張: 3階以上の移動を実現するために、移動する高さをスクリプト内で指定できるよう改良する。
  • エレベーターの速度調整: コルーチン内の速度を変更することで、エレベーターの速さを変えることが可能です。

おすすめのアセット

「Modern Elevators Builder – HDRP」は、ハイパーカジュアルゲームやリアルな3D環境に使用できるエレベーター構築システムを提供するUnityアセットです。このアセットは、HDRP(High Definition Render Pipeline)に対応しており、視覚的に優れた高品質なエレベーターを簡単に生成できます。

このシステムには、エレベーターや建物の環境をワンクリックで作成できる「コンストラクターモジュール」が含まれており、階数やエレベーターの数、内部のデザイン(大理石の色やボタン配置、鏡の有無など)を自由にカスタマイズ可能です。また、実際に操作可能なエレベーターのデモシーンも用意されており、昼夜の切り替えや音声・ライトの効果も含まれています。