UnityUnityメモ

【Unity】移動して止まる動きの作り方!Cubeで往復運動+ストップを実装しよう

Unity

1. はじめに

ゲームを作っていると、「物体が一定距離を移動して、少し止まって、また戻る」という動きを作りたい場面ってありますよね?
たとえば敵キャラのパトロールや、エレベーターのような上下運動、ギミックとして動く床など…こういった「動いて→止まって→動く」の繰り返しは、ゲーム演出に欠かせない要素のひとつです。

今回は、UnityでCubeを前後に動かしながら、1秒ごとに停止する動きを実装してみます!
実際に動かしながら、スクリプトの書き方や仕組みをゆっくり学んでいきましょう✨




2. まずはCubeを作ろう

さっそく、動かすためのオブジェクト「Cube(キューブ)」を作っていきましょう。
このCubeが、前に進んだり止まったり、後ろに戻ったり…という動きをしてくれます!

🎮 Cubeを作成する手順

  1. Unityを開いて、適当な新しいシーンを用意しておきます。
  2. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  3. 「3D Object」→「Cube」を選びましょう。

これでシーンに1個のCubeが追加されました!

作成したCubeの名前を、ヒエラルキーでクリックして「MovingCube」などわかりやすい名前に変えておくと、後でスクリプトをアタッチするときに便利です👍




3. スクリプトを作成しよう

さあ、次はCubeを動かすためのスクリプトを作っていきます!
ここでは、「移動して止まる」をくり返す処理を書いていきますよ〜。

💻 スクリプトを作成する手順

  1. プロジェクトウィンドウ(Project)を右クリックします。
  2. Create」→「C# Script」を選びましょう。
  3. スクリプトの名前を「CubeMove」と入力します。

これで CubeMove.cs というスクリプトファイルが作成されました!
この中に、Cubeの動きを制御するコードを書いていきます。




4. Cubeにスクリプトをアタッチしよう

スクリプトを作成したら、次はそれをCubeにくっつける(アタッチする)作業です!
このステップを忘れると、Cubeは動いてくれませんので要注意です⚠️

🧲 スクリプトをアタッチする手順

  1. ヒエラルキーで、さっき作成した「MovingCube」をクリックします。
  2. プロジェクトウィンドウの中にある「CubeMove.cs」を見つけます。
  3. そのスクリプトを、ドラッグ&ドロップで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でプレイして確認してみましょう!

▶️ プレイして動きを確認!

  1. Unityの上部にある「▶(再生ボタン)」をクリックします。
  2. シーンビューやゲームビューで、Cubeが少しずつ前に進んでいくのを確認してみましょう。
  3. 進んだあとに1秒間ピタッと止まるのをチェック!
  4. そして今度は後ろに戻って、また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)

Q
Cubeが全然動きません。なぜ?
A

スクリプトがCubeにアタッチされているか確認しましょう。
ヒエラルキーでCubeを選んで、インスペクターに「CubeMove」の項目が表示されていればOKです。
また、スクリプトにエラーがないかConsoleウィンドウもチェックしてみてください。

Q
Cubeが止まらず動き続けてしまいます。
A

counter == 100 の条件が正しく書かれているか確認してください。
また、counter = 0;move *= -1; を忘れていないかもポイントです!

Q
移動するスピードを変えたいです。
A

float move = 0.05f; の数値を調整してみましょう。
大きくすると速くなり、小さくするとゆっくり動きます。
また、yield return new WaitForSeconds(0.01f); の値を変えることで滑らかさも変えられます。

タイトルとURLをコピーしました