top of page

【Unity】ベルトコンベアみたいな動く床を作ってみよう!

Unityタイトル画像

Unityでゲームを作っていると、

  • 工場ステージ

  • ダンジョンのトラップ

  • 自動で流される床

など、「キャラクターやオブジェクトが勝手に流れる床」が欲しくなること、ありますよね。

今回はベルトコンベア風の動く床シンプルかつ簡単な処理で作ってみます。

難しいことはせず、タグ判定+Transform移動だけで実装していきます。

【目次】


1. 今回Unityで作るもの


  • 床の上に乗ったCubeが自動で流れる

  • X方向 or Z方向に移動方向を指定可能

  • 移動方向と速度は Inspectorから設定

完成イメージはこんな感じです。

  • 床の上にCubeを置く

  • 再生するとCubeがスーッと流れる

2. 3Dオブジェクトを用意する


まずはUnityを開き、以下のオブジェクトを作成します。


作成するオブジェクト

  1. 床用オブジェクト

    • GameObject → 3D Object → Cube

    • 名前を MoveGround に変更

    • Scale を広げて床っぽくする

      • X:5

      • Y:0.2

      • Z:5

  2. 流す対象のキューブ

    • GameObject → 3D Object → Cube

    • 床の上に配置する

    • RigidBody をアタッチする

これで「床」と「その上に乗るCube」が準備できました。

Unity1

3. キューブにタグを設定する


次に、床の上で流したいオブジェクトにタグを設定します。


タグ設定手順

  1. Cubeを選択

  2. Inspector上部の Tag

  3. Add Tag...

  4. 新しく Cube タグを作成

  5. Cubeに Cube タグを設定

👉このタグを使って「流す対象かどうか」を判定します。

Unity2

4. スクリプトを作成する


次に、床用のスクリプトを作成します。

スクリプト作成

  1. Projectビューで右クリック

  2. Create → C# Script

  3. 名前をMoveGroundManagerに変更

Unity3

5. 動く床の処理を書く


では、スクリプトを開いて中身を書いていきます。

MoveGroundManager.cs

using UnityEngine;

public class MoveGroundManager : MonoBehaviour
{
    [Header("移動速度")]
    public float moveSpeed = 2f;

    [Header("移動方向")]
    public bool moveX = true;   // X方向に動かす
    public bool moveZ = false;  // Z方向に動かす

    private void OnCollisionStay(Collision collision)
    {
        // タグがCubeのオブジェクトだけを動かす
        if (collision.gameObject.CompareTag("Cube"))
        {
            Vector3 moveDir = Vector3.zero;

            if (moveX)
            {
                moveDir.x = 1f;
            }

            if (moveZ)
            {
                moveDir.z = 1f;
            }

            // 移動処理
            collision.transform.position += moveDir.normalized * moveSpeed * Time.deltaTime;
        }
    }
}

6. スクリプトの解説(簡単に)


✔ OnCollisionStay を使う理由

  • 床に 接触している間ずっと 処理を行いたい

  • そのため OnCollisionStay を使用しています

✔ タグ判定

if (collision.gameObject.CompareTag("Cube"))

これにより、

  • Cubeタグのオブジェクトだけが流れる

  • プレイヤーや他のオブジェクトを除外できる

というメリットがあります。


✔ Inspectorから方向指定

  • moveX → X方向に流す

  • moveZ → Z方向に流す

チェックを入れた方向だけに移動します。

7. スクリプトを床にアタッチする


  1. MoveGround(床オブジェクト)を選択

  2. MoveGroundManager をアタッチ

  3. Inspectorで設定

    • Move Speed:お好みで(例:2〜5)

    • Move X:ON / OFF

    • Move Z:ON / OFF


8. 動作確認

最後に再生してみましょう。

  • ▶ 再生ボタンを押す

  • Cubeが床の上でスーッと移動すれば成功 🎉

まとめ

今回は、

  • シンプルなコード

  • タグ判定

  • Inspector設定

だけでベルトコンベア風の動く床を作ってみました。

この仕組みを応用すれば、

  • プレイヤーを流す床

  • ダメージ床

  • 一定区間だけ動く床

など、色々なギミックに発展できます。

ぜひ自分のゲームにも取り入れてみてください!

 
 
bottom of page