Unity:一定時間後に別シーンに遷移(移動)する

unityのロゴ画像 Unity

UnityのTimeクラスのプロパティdeltaTimeを使って、一定時間後に別シーンに遷移(移動)する処理を実践してみます。

今回作成するサンプルの実行イメージ

scene1scene2の2つのシーンを作成しておき、

scene1 が表示された後、3秒経つと scene2 と遷移(移動)するようにします。

起動時、scene1(何もないシーン)が表示されます。(超手抜きシーン!)
Unity:一定時間後に別シーンに遷移(移動)する

3秒経つと…
Unity:一定時間後に別シーンに遷移(移動)する

scene2(Cubeが表示されているシーン)に遷移します。(ちょっと手抜きシーン)

プロジェクトの準備

Unityを起動し、+Newをクリックしてプロジェクトを新規作成します。
プロジェクト名は、「一定時間後に別シーンに遷移する」としてCreate projectボタンをクリックします。

Unity:一定時間後に別シーンに遷移(移動)する

プロジェクトの準備は以上です。

遷移前のシーンと遷移後の2つのシーンを作成する

今回は、最初に表示されているシーンを起動シーンのscene1とします。
File > Save Scene As… を選択します。

Unity:一定時間後に別シーンに遷移(移動)する

シーン名は、「scene1」とします。
Unity:一定時間後に別シーンに遷移(移動)する

次に遷移(移動)先のシーンを作成します。
Assetウインドウの何も無いところで右クリック > Create > Scene を選択します。

Unity:一定時間後に別シーンに遷移(移動)する

シーン名は、「scene2」とします。

Unity:一定時間後に別シーンに遷移(移動)する

シーンの違いを出すため、scene2には、Cube(正方形のオブジェクト)を1つ配置しておきます。
Hierarchyウインドウで、Create > 3D Object > Cube を選択します。

Unity:一定時間後に別シーンに遷移(移動)する

Cubeが作成されました。
Unity:一定時間後に別シーンに遷移(移動)する

シーン作成は以上です。

3秒後にシーン遷移するC#スクリプト

今回シーン遷移するためのスクリプトは、scene1に設定します。
1度scene1をダブルクリックして開いておきます。

Unity:一定時間後に別シーンに遷移(移動)する

Assetウインドウの何も無いところで、Create > C# Script を選択してスクリプトファイルを作成します。

Unity:一定時間後に別シーンに遷移(移動)する

スクリプト名は、「ToScene2」としておきます。
Unity:一定時間後に別シーンに遷移(移動)する

作成したToScene2のスクリプトファイルをダブルクリックしてVisual Studioを起動します。

シーン間の遷移は、SceneManagementクラスLoadSceneメソッドを利用します。

スクリプトの先頭部分に

using UnityEngine.SceneManagement;

を記述してください。

LoadSceneメソッドの使用方法は、引数に遷移(移動)先のシーン名を記述するだけです。

例)
SceneManager.LoadScene(“scene2“);

今回は、3秒後にシーン遷移するようにします。
Unityで正確に時間を計測して何かしたい場合は、TimeクラスのdeltaTimeプロパティを使います。
deltaTimeは、取得のみ可能で、Unityの公式ドキュメントでは、「最後のフレームを完了するのに要した時間(秒)(Read Only)」と説明されています。
要するにわたしのような凡人にはちっとも分かりません(笑)

一応Unity公式ドキュメントでのdeltaTimeの説明は、こちらです。

deltaTimeプロパティは、float型の戻り値を持ちます。
簡単なスクリプトで示します。(本当に簡単ですが)
deltaTimeをUpdate関数の中で次のように使うと時間計測できます。(変数step_timeはfloat型の変数とします)

// 経過時間をカウント
step_time += Time.deltaTime;

// 3秒後に画面遷移(scene2へ移動)
if (step_time >= 3.0f)
{
	SceneManager.LoadScene("scene2");
}

この説明には、異論もあると思いますので、詳しく知りたい方は以下のサイトが参考になります。

【Unity】「Time.deltaTime」を使わないといけない理由を説明する | ゆみねこブログ

シーン遷移ソースコード全体

ToScene2.csのスクリプト全体を示します。

using UnityEngine;
using UnityEngine.SceneManagement;

public class ToScene2 : MonoBehaviour {
	private float step_time;    // 経過時間カウント用

	// Use this for initialization
	void Start()
	{
		step_time = 0.0f;       // 経過時間初期化
	}

	// Update is called once per frame
	void Update()
	{
		// 経過時間をカウント
		step_time += Time.deltaTime;

		// 3秒後に画面遷移(scene2へ移動)
		if (step_time >= 3.0f)
		{
			SceneManager.LoadScene("scene2");
		}
	}
}

ソースコードが記述できたらscene1のオブジェクトにアタッチする必要があります。
通常のゲームであれば、そのゲームを管理するオブジェクトを別に作成しておいて今回作成したスクリプトToScene2.csをアタッチすればいいのでしょうが、面倒なので、最初から存在するMain Cameraにアタッチしておきます。

ToScene2スクリプトをHierachyウインドウのMain Cameraにドラッグ&ドロップしてください。

Unity:一定時間後に別シーンに遷移(移動)する

プロジェクトに含まれるシーンの設定

複数シーンをもつプロジェクトを実行する際は、プロジェクトに含まれるシーンの設定が必要です。
File > Build Settings… を選択します。

Unity:一定時間後に別シーンに遷移(移動)する

以下のようにプロジェクトに必要のないシーンが最初から設定されている場合がありますので、右クリックしてRemove Selectionを選択して削除します。(選択してDeleteキーでも削除できます)
Unity:一定時間後に別シーンに遷移(移動)する

今回プロジェクトに必要なシーンは、scene1scene2です。
とりあえず現在開いているscene1をプロジェクトに追加します。Add Open Scenesボタンをクリックして下さい。
scene1が追加されます。

Unity:一定時間後に別シーンに遷移(移動)する

scene1が追加された。
Unity:一定時間後に別シーンに遷移(移動)する

次にscene2をダブルクリックして開きます。

Unity:一定時間後に別シーンに遷移(移動)する

再度、プロジェクトに含まれるシーンの設定をします。File > Build Settings… を選択してBuild Settingsウインドウを表示し、Add Open Scenesボタンをクリックしてください。

Unity:一定時間後に別シーンに遷移(移動)する

scene1とscene2が追加された状態になれば完了です。

では、実行してみます。

最初に何もないシーン(scene1)が表示され、
Unity:一定時間後に別シーンに遷移(移動)する

3秒経つと…
Unity:一定時間後に別シーンに遷移(移動)する

scene2が表示されたら成功です。

以上、deltaTimeを使ったUnityのシーン遷移(移動)処理でした。

コメント

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