1. はじめに
ゲームを作っていると、「物体が一定距離を移動して、少し止まって、また戻る」という動きを作りたい場面ってありますよね?
たとえば敵キャラのパトロールや、エレベーターのような上下運動、ギミックとして動く床など…こういった「動いて→止まって→動く」の繰り返しは、ゲーム演出に欠かせない要素のひとつです。
今回は、UnityでCubeを前後に動かしながら、1秒ごとに停止する動きを実装してみます!
実際に動かしながら、スクリプトの書き方や仕組みをゆっくり学んでいきましょう✨
2. まずはCubeを作ろう
さっそく、動かすためのオブジェクト「Cube(キューブ)」を作っていきましょう。
このCubeが、前に進んだり止まったり、後ろに戻ったり…という動きをしてくれます!
🎮 Cubeを作成する手順
- Unityを開いて、適当な新しいシーンを用意しておきます。
- ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
- 「3D Object」→「Cube」を選びましょう。
これでシーンに1個のCubeが追加されました!

作成したCubeの名前を、ヒエラルキーでクリックして「MovingCube」などわかりやすい名前に変えておくと、後でスクリプトをアタッチするときに便利です👍
3. スクリプトを作成しよう
さあ、次はCubeを動かすためのスクリプトを作っていきます!
ここでは、「移動して止まる」をくり返す処理を書いていきますよ〜。
💻 スクリプトを作成する手順
- プロジェクトウィンドウ(Project)を右クリックします。
- 「Create」→「C# Script」を選びましょう。
- スクリプトの名前を「CubeMove」と入力します。

これで CubeMove.cs
というスクリプトファイルが作成されました!
この中に、Cubeの動きを制御するコードを書いていきます。
4. Cubeにスクリプトをアタッチしよう
スクリプトを作成したら、次はそれをCubeにくっつける(アタッチする)作業です!
このステップを忘れると、Cubeは動いてくれませんので要注意です⚠️
🧲 スクリプトをアタッチする手順
- ヒエラルキーで、さっき作成した「MovingCube」をクリックします。
- プロジェクトウィンドウの中にある「CubeMove.cs」を見つけます。
- そのスクリプトを、ドラッグ&ドロップでCubeに重ねるようにしてアタッチします。
はい!これで、スクリプトがCubeに適用されました🎉

Cubeを選んだ状態でインスペクター(右側の設定パネル)を見て、
「CubeMove」という項目が表示されていれば、ちゃんとアタッチできています!
5. スクリプトの中身を解説
さあ、ここからがメイン!Cubeを「動かして→止まって→動く」をくり返す仕組みをスクリプトで書いていきます。
まずは、完成したコードを見てみましょう👇
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeMove : MonoBehaviour
{
int counter = 0;
float move = 0.05f;
void Start()
{
StartCoroutine("CubeStart");
}
IEnumerator CubeStart()
{
while (true)
{
Vector3 p = new Vector3(0, 0, move);
transform.Translate(p);
yield return new WaitForSeconds(0.01f);
counter++;
if (counter == 100)
{
counter = 0;
move *= -1;
yield return new WaitForSeconds(1.0f);
}
}
}
}
ではこのコードを、ひとつずつ噛みくだいて説明していきますね!
✅ ① counterとmoveって何?
int counter = 0;
float move = 0.05f;
counter
は「何回動いたか」を数えるためのカウンターです。move
はCubeの移動量(速さ)を決めます。0.05f
なので、ほんの少しずつ前へ進みます。
✅ ② Start()とStartCoroutineで動きをスタート
void Start()
{
StartCoroutine("CubeStart");
}
- Unityでは、
Start()
はゲームが始まったときに自動で呼ばれる関数です。 - その中で
StartCoroutine()
を使って、「コルーチン」と呼ばれる時間を使った処理を始めています。
✅ ③ IEnumerator CubeStart()の中で移動と停止をくり返す
この部分がメインの処理!
while (true)
{
Vector3 p = new Vector3(0, 0, move);
transform.Translate(p);
yield return new WaitForSeconds(0.01f);
counter++;
while (true)
で永遠にループしています。Translate()
でCubeをちょっとずつ前に移動させています。- 毎回少しだけ動いたあと、
0.01秒
だけ待機(つまりちょっとだけ止まる)して、counter
を1つ増やしています。
✅ ④ 100回動いたら、1秒止まって逆方向へ!
if (counter == 100)
{
counter = 0;
move *= -1;
yield return new WaitForSeconds(1.0f);
}
- 100回動いたら(だいたい1秒くらい移動した計算)、
move *= -1
で進行方向を逆にします。 - さらに
1秒間のストップ
を入れて、また反対方向に進み始める…という流れになります!

このしくみで、Cubeが「前に進む → 1秒止まる → 後ろに戻る → 1秒止まる…」という動きを永遠にくり返してくれるんですね!
6. 実行してみよう!
さあ、スクリプトの準備もバッチリ整ったので、いよいよ動作チェックです!
Cubeがちゃんと「進んで止まる、戻って止まる」をくり返してくれるか、Unityでプレイして確認してみましょう!
▶️ プレイして動きを確認!
- Unityの上部にある「▶(再生ボタン)」をクリックします。
- シーンビューやゲームビューで、Cubeが少しずつ前に進んでいくのを確認してみましょう。
- 進んだあとに1秒間ピタッと止まるのをチェック!
- そして今度は後ろに戻って、また1秒停止…これがくり返されていれば成功です✨
🔍 動かないときはここをチェック!
「なんか動かないぞ?」という場合は、次のポイントを確認してみてください:
CubeのZ軸の動きが見えにくくなっていないか?(カメラの角度を調整してみてください)
スクリプトがCubeにちゃんとアタッチされているか?
スクリプトにスペルミスやエラーはないか?(Consoleウィンドウをチェック)
7. 応用アイデア
基本の「進んで止まって、戻って止まる」動きができたら、次はちょっとアレンジしてみましょう!
ここでは、初心者でもすぐ試せる3つの応用アイデアをご紹介します😊
🎲 ① 停止時間をランダムにしてみる
動きにランダム性を入れると、よりリアルっぽくなります!
float waitTime = Random.Range(0.5f, 2.0f);
yield return new WaitForSeconds(waitTime);
このようにすると、Cubeが停止する時間が毎回変わって、少し不規則な動きになります。
敵キャラのパトロールなどにも使えそうですね!
🧱 ② 複数のCubeを動かしてみる
もうひとつCubeをコピーして、同じスクリプトをアタッチしてみましょう。
Cubeごとに「move」の初期値や「counter」の設定を変えれば、動きにバリエーションが出せます!
✨ ③ 音やエフェクトを追加してみる
Cubeが停止するタイミングで音を鳴らしたり、エフェクトを出したりすると、もっとゲームらしくなります!
AudioSource.PlayClipAtPoint(seClip, transform.position);
こんなコードを使えば、Cubeが止まるときに「カチッ」と音を鳴らすなどの演出もできます!

ちょっとした工夫で、同じスクリプトでも全然違う印象の動きが作れますよ!
ぜひいろいろ試して、自分だけの動きを作ってみてくださいね😄
8. まとめ
今回は、Cubeが移動して止まる動きをくり返す方法を、Unityでスクリプトを書きながら作ってきました!
🧩 おさらいポイント
✅ HierarchyウィンドウからCubeを作成
✅ C#スクリプト(CubeMove.cs)を作成してCubeにアタッチ
✅ StartCoroutine()
+IEnumerator
で時間の流れをコントロール
✅ Translate()
で少しずつ移動し、WaitForSeconds()
で一時停止
✅ counter
で移動距離をカウントして、逆方向に切り替え!

このような「動いて止まる」動きは、敵キャラのパトロールやギミックの制御など、いろんなゲームシーンで使えます。
今回の基本コードをベースにして、応用やアレンジをどんどん試してみてくださいね!
よくある質問(FAQ)
- QCubeが全然動きません。なぜ?
- A
スクリプトがCubeにアタッチされているか確認しましょう。
ヒエラルキーでCubeを選んで、インスペクターに「CubeMove」の項目が表示されていればOKです。
また、スクリプトにエラーがないかConsoleウィンドウもチェックしてみてください。
- QCubeが止まらず動き続けてしまいます。
- A
counter == 100
の条件が正しく書かれているか確認してください。
また、counter = 0;
とmove *= -1;
を忘れていないかもポイントです!
- Q移動するスピードを変えたいです。
- A
float move = 0.05f;
の数値を調整してみましょう。
大きくすると速くなり、小さくするとゆっくり動きます。
また、yield return new WaitForSeconds(0.01f);
の値を変えることで滑らかさも変えられます。