UnityUnityメモ

Unity初心者向け!プレイヤーが乗ると下降するエレベーター風の床を作ろう

Unity

1. はじめに

この記事では、Unityを使って「プレイヤーが乗ると下降するエレベーター風の床」を作る方法を解説します。このプロジェクトを通して、Unityの基本的な3Dオブジェクトの操作やスクリプトの使い方、物理エンジンの活用方法を学ぶことができます。

初心者向けに、分かりやすい手順で進めていきますので、プログラミングやゲーム開発が初めてという方でも安心してください!最後には、自分で動かせる簡単な仕組みを作成できるようになります。それでは、さっそく始めてみましょう!

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



2. 床とプレイヤーオブジェクトの作成

このステップでは、プレイヤーが立つ床と、操作するプレイヤーオブジェクトを作成していきます。Unity初心者の方でも簡単にできるので、順を追って進めてみましょう!


1. 床(Cube)の配置と調整

まずは、プレイヤーが最初に立つ床を作成します。

  1. Hierarchyウィンドウを右クリックして「3D Object」→「Cube」を選びます。
  2. 作成したCubeをわかりやすいように名前を「Floor」に変更しましょう。
  3. InspectorウィンドウでCubeの位置とサイズを次のように設定します:
    • Position(-1, 0, 0)
    • Scale(3, 0.2, 3)

色を変更(任意)

これで、プレイヤーが立つ床ができました!床を見やすくするために、色を変更したい場合は以下の手順でマテリアルを作成して適用してください。

  • プロジェクトウィンドウを右クリック → 「Create」→「Material」を選択し、新しいマテリアルを作成。
  • 好きな色を設定して、床(Floor)にドラッグ&ドロップします。

2. プレイヤーオブジェクト(Sphere)の配置と調整

次に、プレイヤーが操作するオブジェクトを作成します。

  1. Hierarchyウィンドウを右クリックして「3D Object」→「Sphere」を選びます。
  2. Sphereを床の上に配置し、Inspectorウィンドウで次のように設定します:
    • Position(-1, 0.6, 0)
      (床の中心より少し上に配置)
    • サイズはそのままでOKです。
  3. Sphereの色を変更したい場合は、先ほどと同じ手順でマテリアルを作成して適用しましょう。
  4. Sphereに物理挙動を追加するため、Inspectorウィンドウで「Add Component」をクリックし、「Rigidbody」を検索して追加します。

これで、床とプレイヤーオブジェクトが完成しました!次のステップでは、プレーヤーを操作できるようにスクリプトを作成していきます。楽しみながら進めていきましょう!



3. スクリプトでプレイヤーを操作

このステップでは、プレイヤーが操作する「Sphere」オブジェクトを動かすためのスクリプトを作成します。簡単なコードでプレイヤーを移動させる仕組みを学びましょう。


スクリプトの作成

  1. プロジェクトウィンドウを右クリック
    プロジェクトウィンドウ内で右クリックして「Create」→「C# Script」を選びます。
  2. スクリプト名を「SphereMove」に変更
    新しく作成されたスクリプトに「SphereMove」という名前を付けます。

スクリプトの編集

作成した「SphereMove」スクリプトをダブルクリックして開き、以下のコードを入力します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SphereMove : MonoBehaviour
{
    public GameObject dropFloor;

    void Update()
    {
        // プレーヤーの水平移動を処理
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;

        // 現在の位置に移動量を加算
        transform.position = new Vector3(
            transform.position.x + dx, transform.position.y, transform.position.z + dz
        );
    }

    private void OnTriggerEnter(Collider other)
    {
        // エリアに触れた時に降下床を動かす
        if (other.gameObject.name == "Area")
        {
            dropFloor.GetComponent<Rigidbody>().useGravity = true;
        }
    }
}

コードのポイント解説

  1. プレイヤーを動かす部分
    Update() メソッド内では、Input.GetAxis を使ってキーボードの矢印キーや WASD キーでプレイヤーを移動させます。
    • Horizontal は左右の入力(A/D または←/→)。
    • Vertical は前後の入力(W/S または↑/↓)。
    • Time.deltaTime を掛けることで、フレームレートによらない安定した移動を実現しています。
  2. トリガーの検知
    OnTriggerEnter(Collider other) は、プレイヤーが特定のエリアに触れた時の動作を定義しています。ここでは、エリアオブジェクト(Area)に触れると、降下床の Rigidbody に重力を適用して動かしています。
  3. ドロップ床との連携
    dropFloor.GetComponent<Rigidbody>().useGravity = true; で、降下床の物理演算を有効化します。これにより、床が重力で降下するようになります。

スクリプトのアタッチ

  1. HierarchyウィンドウでSphereを選択
    「Sphere」オブジェクトを選択します。
  2. Inspectorウィンドウでスクリプトを追加
    「Add Component」をクリックして、作成した「SphereMove」スクリプトをドラッグ&ドロップでアタッチします。
  3. DropFloorをドラッグ&ドロップ
    スクリプト内の dropFloor に、この後作成する「DropFloor」オブジェクトをドラッグしてリンクします。

これで、プレイヤーオブジェクトを操作できるようになりました!次は降下する床の設定に進みましょう。



4. 降下する床の設定

このステップでは、プレイヤーが特定のエリアに入ると下降する床を作成します。以下の手順に従って設定していきましょう。


降下する床を作成する

  1. Hierarchyウィンドウで「3D Object」→「Cube」を選択
    • これが降下する床になります。
    • 名前を「DropFloor」に変更し、他のオブジェクトと区別しやすくします。
  2. Inspectorで位置とサイズを調整
    • Position:(2, -0.5, 0)
    • Scale:(3, 0.2, 3)
    • これで床が適切な位置とサイズに配置されます。
  3. 床の色を変更する
    • Inspectorで「Material」を割り当てて、視覚的にわかりやすくしましょう。

Rigidbodyを追加する

  1. Inspectorで「Add Component」をクリックし、「Rigidbody」を検索して追加
    • このコンポーネントが床の物理挙動を制御します。
  2. Rigidbodyの設定を変更
    • Drag: 10
      • これで床の落下速度が制御され、スムーズに動きます。
    • Use Gravity: チェックを外す
      • 初期状態では重力を無効にします。スクリプトで重力を有効にするよう設定します。
  3. Freeze Rotationの設定
    • RigidbodyのConstraintsセクションで「Freeze Rotation」の全軸にチェックを入れます。
      • これにより、床が回転せず、安定して下降します。

降下する床の上に当たり判定エリアを作成

  1. Hierarchyウィンドウで「3D Object」→「Cube」を選択
    • 床の上に設置し、名前を「Area」に変更します。
  2. InspectorでBoxColliderを設定
    • 「BoxCollider」の「Is Trigger」にチェックを入れます。
      • プレーヤーがエリアに入ったことを検知するための設定です。
  3. 透明なMaterialを適用
    • プロジェクトウィンドウで「Create」→「Material」を選択し、新しいマテリアルを作成。
    • Inspectorで以下のように設定します:
      • Rendering Mode: Fade
      • AlbedoのA値: 0(透明度を最大にする)
    • このMaterialを「Area」にアタッチして、透明にします。

以上で降下する床の設定は完了です!次のステップでは、この床をスクリプトで動作させる方法を確認します。



6. テストプレイで確認

さて、ここまでの設定が完了したら、いよいよテストプレイで動作を確認してみましょう!以下の手順で実行してください。


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

Unityエディターの上部にある再生ボタン(▶)をクリックして、プレイモードを開始します。画面内のプレーヤー(Sphere)が操作できるかをまず確認しましょう。


2. プレイヤーを動かしてみる

キーボードの矢印キーまたは W, A, S, D キーを使って、プレイヤーオブジェクトを動かしてみてください。スムーズに移動するようなら、このステップは成功です。


3. 降下する床の確認

次に、プレイヤーオブジェクトを「透明なエリア(Area)」の中に移動させてみましょう。以下の動作が起きれば正しく設定されています:

  • プレイヤーがエリアに入った瞬間、床(DropFloor)がゆっくりと下降を開始する。

もし動作しない場合は、以下のポイントを確認してください:

  1. エリア(Area)の「BoxCollider」の「IsTrigger」がチェックされているか?
  2. 「DropFloor」に追加したRigidbodyの「UseGravity」がチェックされていないか?
  3. スクリプト内で指定した「dropFloor」オブジェクトに「DropFloor」が正しくアタッチされているか?

4. 動作が正常でない場合のデバッグ

動作が予期した通りでない場合、以下のデバッグ手順を試してください:

  1. スクリプトのエラーチェック
    コンソールウィンドウを開き、エラーメッセージが表示されていないか確認します。特に「NullReferenceException」などのエラーが出ている場合、オブジェクトのアタッチ漏れが原因の可能性があります。
  2. 物理設定の見直し
    Rigidbodyの「Drag」や「Mass」の値を調整することで、床の下降速度を変更できます。

5. ゲームの最終調整

動作確認が完了したら、見た目や動きをさらにカスタマイズしてみましょう!たとえば:

  • 床の色を変えて、ゲームの雰囲気に合うデザインにする。
  • 降下速度をもっとゆっくりさせるために「Drag」の値を増やす。
  • 降下後に床が停止するように条件を追加する。

ここまでがテストプレイの流れです。Unityでの動作確認はゲーム作りの面白さを実感できる部分でもあります。ぜひいろいろ試してみて、オリジナルの要素を追加してみてください!



よくある質問

Q
Rigidbodyの設定が効かない場合はどうすればいいですか?
A

Rigidbodyが正しく動作しない場合、以下の点を確認してください:

  • Rigidbodyが追加されているオブジェクトを正しく選択しているか。
  • 「Use Gravity」や「Freeze Rotation」の設定が意図した通りになっているか。
  • Rigidbodyの「Drag」や「Mass」の値が極端に大きいまたは小さくないか。適切な値に設定してみてください。
Q
スクリプトが動作しない時の確認方法は?
A

スクリプトが動作しない場合、次のチェックポイントを確認してください:

  • スクリプトが対象のオブジェクトにアタッチされているか。
  • コンソールウィンドウにエラーが表示されていないか確認し、エラーがある場合は内容を読んで修正してください。
  • スクリプト内の「dropFloor」などの変数が正しく設定されているか、Inspectorで確認してください。
Q
プレイヤーオブジェクトが動かない原因は何ですか?
A

プレイヤーオブジェクトが動かない場合は、以下を確認しましょう:

  • 「SphereMove」スクリプトが正しくアタッチされているか。
  • 「Horizontal」や「Vertical」のInput設定がプロジェクトに存在しているか。これはUnityのInput Managerで確認できます。
  • RigidbodyコンポーネントがSphereに追加されているか。Rigidbodyがないと物理演算や移動が機能しません。

おすすめのアセット

「Modern Elevators Builder – Built-in RP」は、リアルで高品質なエレベーター環境を簡単に作成できるUnityアセットです。多彩なエレベーターモデルやドア、ボタン、インテリアなどが含まれ、カスタマイズ可能です。Built-in Render Pipelineに対応しており、商業用ビルや住宅など、現代的な建物の制作に最適です。初めての方でもすぐに使えるように設計されており、都市環境やインテリアデザインにリアリティを追加したい方におすすめです。