UnityUnityメモ

Unityで簡単!n秒おきに繰り返し実行するスクリプトを作ろう

Unity

1. はじめに

Unityを使ってゲームやインタラクティブなコンテンツを作りたいけれど、どこから始めればいいかわからない…そんな初心者の方に向けて、今回はオブジェクトを「一定時間ごとに左右に動かす」仕組みを作る方法をお届けします。

この記事では、Unityでよく使われる**Coroutine(コルーチン)**という便利な機能を活用します。この機能を使えば、簡単にタイマーや繰り返し処理を実現することができます。特に、キューブ(Cube)という3Dオブジェクトを使い、右に動かした後一旦停止し、今度は左に動くという動作を繰り返すスクリプトを作成します。

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



2. キューブを作成する

Unityでオブジェクトを動かすためには、まずシーンにオブジェクトを配置する必要があります。ここでは、シーンにキューブを追加する方法をわかりやすく説明します。

  1. ヒエラルキーウィンドウを開く
    Unityエディタの左側にある「Hierarchy(ヒエラルキー)」ウィンドウを見つけてください。このウィンドウは、シーンに存在するすべてのオブジェクトを管理する場所です。
  2. 右クリックしてメニューを開く
    ヒエラルキーウィンドウ内で右クリックすると、メニューが表示されます。
  3. 「3D Object」→「Cube」を選択する
    表示されたメニューの中から「3D Object」を選び、その中の「Cube」をクリックします。すると、シーンにキューブが追加されます。
  4. キューブの確認
    シーンビューを確認すると、キューブが追加されているはずです。また、ヒエラルキーウィンドウにも「Cube」という名前でオブジェクトが表示されます。
  5. キューブの位置を調整する(必要に応じて)
    シーンビュー上でキューブをクリックすると、移動ツール(矢印マーク)が表示されます。このツールを使って、キューブの位置をドラッグして好きな場所に移動させることができます。初期位置が気になる場合は、インスペクタウィンドウの「Transform」欄で「Position」を調整してもOKです。

これでキューブの作成が完了です!次は、このキューブを動かすためのスクリプトを作成しましょう。



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

それでは、キューブを動かすスクリプトを作成していきましょう!まずはUnityエディタで新しいスクリプトを作成し、必要なコードを記述します。以下の手順に従ってください。


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

  1. プロジェクトウィンドウで何もない場所を右クリックします。
  2. 表示されたメニューから「Create」→「C# Script」を選択します。
  3. 新しく作成されたスクリプトに「MoveCube」という名前を付けます。名前を付けるときは、スペルミスに注意してください!
  4. 作成したスクリプトをダブルクリックすると、コードエディタ(通常はVisual Studio)が開きます。

2. 必要なコードを記述する

スクリプトが開いたら、以下のコードを入力してください。このコードはキューブが一定時間ごとに左右に動く仕組みを実現します。

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

public class MoveCube : MonoBehaviour
{
    private float timeReset = 3f;  // キューブが方向を変えるまでの待ち時間
    private float time = 0f;       // 時間のカウント
    private bool flag;             // 右に動くか左に動くかのフラグ

    void Start()
    {
        StartCoroutine("CubeRight");  // 最初に右に動かすコルーチンを開始
        time = 0f;  // タイマーをリセット
        flag = true;  // 初期状態は右に動く
    }

    void Update()
    {
        // 時間を更新
        time += Time.deltaTime;

        // キューブが右に動き終わったら左に動かす
        if (!flag && time > timeReset)
        {
            StartCoroutine("CubeRight");  // 右に動くコルーチンを開始
            time = 0f;  // タイマーをリセット
            flag = true;  // 次は右に動く
        }

        // キューブが左に動き終わったら右に動かす
        if (flag && time > timeReset)
        {
            StartCoroutine("CubeLeft");  // 左に動くコルーチンを開始
            time = 0f;  // タイマーをリセット
            flag = false;  // 次は左に動く
        }
    }

    // キューブを右に動かすコルーチン
    IEnumerator CubeRight()
    {
        for (int i = 0; i < 100; i++)
        {
            yield return new WaitForSeconds(0.01f);  // 0.01秒ごとに処理を一時停止
            transform.Translate(0.1f, 0, 0);  // キューブを右に動かす
        }
    }

    // キューブを左に動かすコルーチン
    IEnumerator CubeLeft()
    {
        for (int k = 0; k < 100; k++)
        {
            yield return new WaitForSeconds(0.01f);  // 0.01秒ごとに処理を一時停止
            transform.Translate(-0.1f, 0, 0);  // キューブを左に動かす
        }
    }
}

3. コードのポイントを解説

  • StartCoroutine("CubeRight")
    初期状態でキューブを右に動かす処理を開始します。
  • timeReset
    この変数でキューブが方向を変えるまでの時間を設定しています。必要に応じて値を変更してみましょう。
  • IEnumerator
    コルーチンを使ってキューブを滑らかに動かします。この処理では、キューブが0.01秒ごとに少しずつ移動するようにしています。

これでスクリプトの準備が整いました!次のステップでは、このスクリプトをキューブにアタッチして実行する方法を説明します。続きをお楽しみに!



4. スクリプトをキューブにアタッチする

スクリプトを作成しただけでは、ゲーム内で動作しません。このステップでは、作成したスクリプトをキューブにアタッチする方法を説明します。


手順:

  1. ヒエラルキーウィンドウで先ほど作成したキューブを選択します。
    • キューブを選択すると、右側にあるインスペクタウィンドウが更新されます。
  2. プロジェクトウィンドウから作成したスクリプト「MoveCube」を見つけます。
    • スクリプトは、Assetsフォルダ内や選択した保存場所に表示されています。
  3. スクリプトをドラッグ&ドロップします。
    • 「MoveCube」スクリプトをヒエラルキーウィンドウ内のキューブに直接ドラッグ&ドロップするか、インスペクタウィンドウにドラッグします。
    • インスペクタ内に「MoveCube (Script)」という項目が表示されれば成功です。
  4. アタッチが確認できたら保存します。
    • 忘れずにプロジェクトを保存しておきましょう(ショートカットキー:Ctrl + S または Cmd + S)。

ポイント:

  • スクリプトが正しくアタッチされていない場合、Unityエディタでエラーが表示されることがあります。エラーが発生した場合は、以下を確認してください:
    • スクリプト名が正しいか。
    • スクリプト内のコードにエラーがないか。
    • キューブを選択しているか。

これでスクリプトをキューブにアタッチする作業は完了です!次のステップでは、ゲームを実行してキューブが期待通りに動くか確認してみましょう。



5. ゲームを実行して確認

さて、スクリプトの準備が整ったら、いよいよゲームを実行して動作を確認します!以下の手順に従って進めてみましょう。


1. Unityエディタで再生

  • Unityエディタの上部にある「再生ボタン(▶)」をクリックします。
  • シーンビューまたはゲームビューで、キューブが左右に動いていることを確認します。

2. キューブの動きを観察

  • キューブが右に移動したあと、一時停止してから左に移動する動きが繰り返されます。
  • コルーチンが正しく動いている場合、一定のリズムで動作するはずです。

3. 問題がある場合のチェックリスト

もし、期待通りに動作しない場合は以下を確認してください:

  1. スクリプトがアタッチされているか
    • キューブのインスペクタウィンドウに「MoveCube」スクリプトが表示されているか確認しましょう。
  2. スクリプトにエラーがないか
    • コードにミスがある場合、Unityエディタの下部にある「コンソール」にエラーメッセージが表示されます。エラー内容を確認して修正してください。
  3. キューブの位置が動いているか
    • 動いていない場合は、Translateの値が小さすぎる可能性があります。transform.Translate(0.1f, 0, 0)の値を大きくしてみてください(例:0.2f)。
  4. 再生が停止していないか
    • 再生ボタンをもう一度押していないか確認してください。再生が停止しているとゲームが実行されません。

4. 微調整して完成度をアップ

動作が確認できたら、次は微調整をしてみましょう。

  • 移動速度を変更
    コード内のTranslateWaitForSecondsの値を調整することで、移動速度やタイミングを変えることができます。
  • 移動距離を変更
    ループ回数(例:for (int i = 0; i < 100; i++))を増減させることで、キューブが動く距離を変更できます。
  • 移動方向を変更
    Translateのx, y, z軸の値を変更すると、異なる方向に動かせます。例えば、transform.Translate(0, 0, 0.1f)とすれば、キューブが前後に動きます。

5. 実行結果を保存

動作が問題なく確認できたら、プロジェクトを保存します。

  1. メニューから「File」→「Save Project」を選択。
  2. 次回も続きができるようにプロジェクト全体をバックアップしておきましょう。

以上で、キューブの左右移動スクリプトの確認と調整は完了です!次はさらに複雑な動作を追加して、より魅力的なゲーム作りに挑戦してみましょう。 🎮



よくある質問

Q
Coroutineが動きません。原因は?
A

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

  • メソッド名が間違っていないか確認StartCoroutine("メソッド名")で正しいメソッド名を指定していますか?例えば、StartCoroutine("CubeRight")と記述されている必要があります。
  • スクリプトが有効か確認:スクリプトがキューブにアタッチされているか、インスペクタウィンドウでスクリプトが有効になっているかを確認してください。
  • エラーがないか確認:Unityのコンソールにエラーが表示されていないか確認しましょう。エラーがある場合、コードを見直して修正してください。
Q
キューブが全く動きません。
A

キューブが動かない場合、以下を確認してみましょう:

  • スクリプトをアタッチしているか:ヒエラルキーウィンドウで選択したキューブにスクリプトをドラッグ&ドロップしましたか?
  • Translateの数値が正しいか:コード内のtransform.Translateの値が小さすぎたり、0になっていませんか?デフォルトの0.1fを調整することで移動量を変更できます。
  • 再生モードになっているか:Unityの再生ボタンを押して実行中であることを確認してください。
Q
キューブの動きを速く/遅くするには?
A

キューブの動きを調整したい場合、以下のポイントを編集してください:

  • Translateの値を変更transform.Translate(0.1f, 0, 0)の値を変更することで、キューブの1回の移動量を調整できます。大きい値にすると速く、小さい値にすると遅く動きます。
  • WaitForSecondsの値を変更yield return new WaitForSeconds(0.01f)の値を変更すると、移動の間隔を調整できます。小さくすると速くなり、大きくすると遅くなります。
  • timeResetの値を変更:タイマーで方向を切り替える間隔も調整可能です。timeResetの初期値(例:3f)を変更して、動きが切り替わるまでの待機時間を設定しましょう。

おすすめのアセット

「Bubble Shooter: Game Toolkit」は、Unityでバブルシューターゲームを簡単に作成できるテンプレートです。このアセットは、高品質な2Dバブルシューターゲームを作成するための完全なツールセットを提供し、細かいカスタマイズが可能です。使いやすい設計で、ゲームのスタイルやルールを自由に調整できます。URP(Universal Render Pipeline)およびビルトインレンダーパイプラインに対応しており、モバイルやPCでのスムーズなパフォーマンスを実現します。