スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unity クリックで動きを一時停止、再開する

Unity

今回は、左右に動くCubeオブジェクトを作り、それをクリックで一時停止し、再度クリックで再開させる方法を紹介します。Unityを初めて触る方でもわかりやすく説明するので、一緒にやってみましょう!

1. Unityプロジェクトの準備

まず、Unityを起動して新しいプロジェクトを作成します。

2. Cubeオブジェクトの作成

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックし、「3D Object」→「Cube」を選びます。

3. スクリプトの作成

次に、Cubeの動きを制御するためのスクリプトを作成します。

  1. プロジェクト(Project)ウィンドウで右クリックし、「Create」→「C# Script」を選びます。
  2. スクリプトの名前を「StopMove」にします。

4. スクリプトの編集

「StopMove」スクリプトをダブルクリックして、以下のコードを入力します。

コード全体の説明

この「StopMove」スクリプトは、Unityでオブジェクトを動かすためのものです。ユーザーがマウスの左ボタンをクリックすると、オブジェクトの動きが停止したり再開したりします。

各部分の説明

  • 変数の定義
private float count;
private float move = 0.1f;
public bool isStop;
  • countは、オブジェクトが移動するステップ数をカウントします。
  • moveは、オブジェクトが毎フレームごとに移動する距離です。初期値は0.1fです。
  • isStopは、オブジェクトが停止しているかどうかを示すフラグです。

  • Startメソッド
void Start()
{
    isStop = false;
}
  • Startメソッドは、ゲームが始まると最初に呼ばれるメソッドです。ここでは、isStopfalseに初期化します。つまり、最初はオブジェクトが動く状態です。
  • Updateメソッド
void Update()
{
    if (Input.GetMouseButtonDown (0) && !isStop)
    {
        isStop = true;
    }
    else if (Input.GetMouseButtonDown (0) && isStop)
    {
        isStop = false;
    }

    if (isStop)
    {
        Time.timeScale = 0f;
    }
    else if (!isStop)
    {
        Vector3 position = new Vector3(move, 0, 0);
        transform.Translate(position);
        count++;

        if (count == 100)
        {
            count = 0;
            move *= -1;
        }
        Time.timeScale = 1f;
    }
}
  • Updateメソッドは、毎フレームごとに呼ばれます。
  • Input.GetMouseButtonDown(0)は、マウスの左ボタンがクリックされたときにtrueを返します。
  • if (Input.GetMouseButtonDown(0) && !isStop)は、マウスの左ボタンがクリックされ、かつisStopfalseのときに、isStoptrueに設定します。つまり、オブジェクトを停止します。
  • else if (Input.GetMouseButtonDown(0) && isStop)は、マウスの左ボタンがクリックされ、かつisStoptrueのときに、isStopfalseに設定します。つまり、オブジェクトの動きを再開します。
  • if (isStop)は、isStoptrueの場合、時間の流れを停止します(Time.timeScale = 0f)。
  • else if (!isStop)は、isStopfalseの場合、オブジェクトを移動させます。
  • Vector3 position = new Vector3(move, 0, 0);は、オブジェクトの移動量を設定します。
  • transform.Translate(position);は、オブジェクトを移動させます。
  • count++は、移動ステップをカウントします。
  • if (count == 100)は、100ステップ移動したら、方向を逆にします(move *= -1)。
  • Time.timeScale = 1f;は、時間の流れを通常に戻します。

全体の動き

  1. ゲームが始まると、オブジェクトは右方向に動き始めます。
  2. マウスの左ボタンをクリックすると、オブジェクトの動きが停止します。
  3. 再度クリックすると、オブジェクトの動きが再開します。
  4. オブジェクトは100ステップ動くごとに方向を逆にします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class StopMove : MonoBehaviour
{
    private float count;
    private float move = 0.1f;
    public bool isStop;
 
    void Start()
    {
        isStop = false;
    }
 
    void Update()
    {
        if (Input.GetMouseButtonDown (0) && !isStop)
        {
            isStop = true;
        }
        else if (Input.GetMouseButtonDown (0) && isStop)
        {
            isStop = false;
        }
 
        if (isStop)
        {
            Time.timeScale = 0f;
        }
        else if (!isStop)
        {
            Vector3 position = new Vector3(move, 0, 0);
            transform.Translate(position);
            count++;
 
            if (count == 100)
            {
                count = 0;
                move *= -1;
            }
            Time.timeScale = 1f;
        }
    }
}

5. スクリプトをCubeにアタッチ

作成した「StopMove」スクリプトを「Cube」にドラッグ&ドロップしてアタッチします。

6. テスト実行

  1. 再生(Play)ボタンをクリックして実行します。

実行すると、「Cube」が左右に動き始めます。画面をクリックすると動きが一時停止し、もう一度クリックすると再び動き出します。

まとめ

この方法を使えば、オブジェクトの動きを簡単に一時停止したり再開させたりすることができます。Unityの基本操作を覚えながら、動きを制御するスクリプトの書き方も学べるので、ぜひ試してみてください!

おすすめのアセット

「60 Games Bundle」は、パズル、カジュアル、レトロ、サバイバル、プラットフォーマー、アドベンチャーなど多彩なジャンルのゲームが60本詰まったお得なセットです。これにより、ゲーム開発者は様々なジャンルのゲームを簡単に作成することができます。セットには完全なソースコードが含まれており、カスタマイズも自由自在。個人や小規模企業に最適なライセンスが付いており、購入後のサポートも充実しています。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました