UnityのTimeクラスのプロパティdeltaTimeを使って、一定時間後に別シーンに遷移(移動)する処理を実践してみます。
今回作成するサンプルの実行イメージ
scene1とscene2の2つのシーンを作成しておき、
scene1 が表示された後、3秒経つと scene2 と遷移(移動)するようにします。
起動時、scene1(何もないシーン)が表示されます。(超手抜きシーン!)
3秒経つと…
scene2(Cubeが表示されているシーン)に遷移します。(ちょっと手抜きシーン)
プロジェクトの準備
Unityを起動し、+Newをクリックしてプロジェクトを新規作成します。
プロジェクト名は、「一定時間後に別シーンに遷移する」としてCreate projectボタンをクリックします。
プロジェクトの準備は以上です。
遷移前のシーンと遷移後の2つのシーンを作成する
今回は、最初に表示されているシーンを起動シーンのscene1とします。
File > Save Scene As… を選択します。
シーン名は、「scene1」とします。
次に遷移(移動)先のシーンを作成します。
Assetウインドウの何も無いところで右クリック > Create > Scene を選択します。
シーン名は、「scene2」とします。
シーンの違いを出すため、scene2には、Cube(正方形のオブジェクト)を1つ配置しておきます。
Hierarchyウインドウで、Create > 3D Object > Cube を選択します。
Cubeが作成されました。
シーン作成は以上です。
3秒後にシーン遷移するC#スクリプト
今回シーン遷移するためのスクリプトは、scene1に設定します。
1度scene1をダブルクリックして開いておきます。
Assetウインドウの何も無いところで、Create > C# Script を選択してスクリプトファイルを作成します。
スクリプト名は、「ToScene2」としておきます。
作成した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にドラッグ&ドロップしてください。
プロジェクトに含まれるシーンの設定
複数シーンをもつプロジェクトを実行する際は、プロジェクトに含まれるシーンの設定が必要です。
File > Build Settings… を選択します。
以下のようにプロジェクトに必要のないシーンが最初から設定されている場合がありますので、右クリックしてRemove Selectionを選択して削除します。(選択してDeleteキーでも削除できます)
今回プロジェクトに必要なシーンは、scene1とscene2です。
とりあえず現在開いているscene1をプロジェクトに追加します。Add Open Scenesボタンをクリックして下さい。
scene1が追加されます。
scene1が追加された。
次にscene2をダブルクリックして開きます。
再度、プロジェクトに含まれるシーンの設定をします。File > Build Settings… を選択してBuild Settingsウインドウを表示し、Add Open Scenesボタンをクリックしてください。
scene1とscene2が追加された状態になれば完了です。
では、実行してみます。
最初に何もないシーン(scene1)が表示され、
3秒経つと…
scene2が表示されたら成功です。
以上、deltaTimeを使ったUnityのシーン遷移(移動)処理でした。
コメント