【Unity】ベルトコンベアみたいな動く床を作ってみよう!
- ラメンスキー

- 1月1日
- 読了時間: 3分

Unityでゲームを作っていると、
工場ステージ
ダンジョンのトラップ
自動で流される床
など、「キャラクターやオブジェクトが勝手に流れる床」が欲しくなること、ありますよね。
今回はベルトコンベア風の動く床をシンプルかつ簡単な処理で作ってみます。
難しいことはせず、タグ判定+Transform移動だけで実装していきます。
【目次】
1. 今回Unityで作るもの
床の上に乗ったCubeが自動で流れる
X方向 or Z方向に移動方向を指定可能
移動方向と速度は Inspectorから設定
完成イメージはこんな感じです。
床の上にCubeを置く
再生するとCubeがスーッと流れる
2. 3Dオブジェクトを用意する
まずはUnityを開き、以下のオブジェクトを作成します。
作成するオブジェクト
床用オブジェクト
GameObject → 3D Object → Cube
名前を MoveGround に変更
Scale を広げて床っぽくする
X:5
Y:0.2
Z:5
流す対象のキューブ
GameObject → 3D Object → Cube
床の上に配置する
RigidBody をアタッチする
これで「床」と「その上に乗るCube」が準備できました。

3. キューブにタグを設定する
次に、床の上で流したいオブジェクトにタグを設定します。
タグ設定手順
Cubeを選択
Inspector上部の Tag
Add Tag...
新しく Cube タグを作成
Cubeに Cube タグを設定
👉このタグを使って「流す対象かどうか」を判定します。

4. スクリプトを作成する
次に、床用のスクリプトを作成します。
スクリプト作成
Projectビューで右クリック
Create → C# Script
名前をMoveGroundManagerに変更

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. スクリプトを床にアタッチする
MoveGround(床オブジェクト)を選択
MoveGroundManager をアタッチ
Inspectorで設定
Move Speed:お好みで(例:2〜5)
Move X:ON / OFF
Move Z:ON / OFF
8. 動作確認
最後に再生してみましょう。
▶ 再生ボタンを押す
Cubeが床の上でスーッと移動すれば成功 🎉
まとめ
今回は、
シンプルなコード
タグ判定
Inspector設定
だけでベルトコンベア風の動く床を作ってみました。
この仕組みを応用すれば、
プレイヤーを流す床
ダメージ床
一定区間だけ動く床
など、色々なギミックに発展できます。
ぜひ自分のゲームにも取り入れてみてください!


