【Unity入門】(5分でわかる)シーン切り替え方法!

今回はゲーム開発において必須のスキル、シーン切り替えのやり方について解説していきます。

タイトル→ホーム画面といったように、ゲーム起動3秒で必要になる技術なので、しっかり抑えておきましょう!


Unityについて詳しく学びたい人は、下の記事で僕が厳選したおすすめのUnity学習本を3冊ほど紹介していますので、ぜひ参考にしてみてください

プログラム書式

すべて見ている暇なんかない!という人向けに、先に書式を提示しておきます。

ライブラリ

using UnityEngine.SceneManagement;

書式(プログラム中の任意のタイミングで実行)

SceneManager.LoadScene(“SceneName”); 

SceneNameは実際のシーンの名前を入れてください。

また、登録していないシーンへは遷移できませんのでご注意を。

シーン切り替えのやり方

シーンの作り方

まずは、シーンの作り方について知っておきましょう。

Scenesフォルダーをダブルクリックして開きます。

右クリックしてメニューを開き、Create→Sceneを選択してシーンを作成します。

名前はアルファベットで付けましょう。あとは自由でOKです。

僕はTitleシーンを作成しました。

これをダブルクリックすることでそのシーンを編集することができるようになります。

シーンの登録

それでは早速シーン切り替えのやり方をやっていきますが、まずは準備が必要です。

シーンの遷移を行うためには、シーンを登録する必要があります。

やり方はとても簡単です。

File→Build Profilesを選択しましょう。

そして、新しく作ったSceneを開いている状態で、Scene List項目のAdd Open Scenesを押します。

すると、先程作ったSceneがリストに追加されているのがわかるかと思います。※Sceneを開いた状態でボタンを押さないと追加されません。

これで下準備完了です。

スクリプト作成

いよいよシーンの切り替えを行っていきます。

まずは、スクリプトの作成を行いましょう。

ScriptsフォルダをAssetsフォルダに作成してください。作り方は右クリックしたあと、Create→Folderです。

作成したら、Scriptsフォルダを開き、右クリック、出てきたメニューからCreate→Scripting→NewMonoBehaviourScriptを選択しましょう。

名前はアルファベットを使っていればなんでもいいです。

僕はSceneTransitionとしました。

そしたら作成したスクリプトをダブルクリックしましょう。

エディターが開いたら、プログラムを書いていきます!

今回は、画面をクリックしたらTitle →SampleSceneに移動するという流れにしたいと思います。

update()の中に以下のプログラムを書きましょう。

if(Input.GetMouseButtonDown(0)){

     SceneManager.LoadScene("SampleScene ");

}

まずif文の中で画面クリックを判定しています。そして、SceneManager.LoadSceneで別のシーンへ遷移します。

Ctrl+sで保存したらUnityの画面に戻りましょう。

オブジェクト設置

作成したプログラムはシーン中のオブジェクトにもたせてあげないと動きません。

一旦Titleシーンを開き、ヒエラルキーウィンドウでオブジェクトを作ります。

左上の+ボタンを押し、Create Emptyを選択します。

名前は何でも良いです。シーン遷移をつかさどるのでMasterにしました。

そしたら、今作ったオブジェクトに、先程のスクリプトをドラッグ&ドロップで適用させます

ページ遷移したことがわかりやすいようにテキストを設置した状態で実行してみます。

このように、画面をクリックするとシーンが切り替わるようになりました。

Tips

ここからは、シーン切り替えを実装するときのお役立ち情報を少し紹介していこうと思います。

シーン間で変数の値を共有

シーン間でデータを保持しておきたい場合があると思いますのでやり方を共有。

変数の宣言↓

protected static int data = 0;

ポイントはstaticで宣言していることです。

本来別シーンへ移動するとデータが消えますがstaticにすることで保持されます。

ゲッター(detaの値を取得)↓

public static int GetData()

{

    return data;

}

セッター(dataの値を新たに設定)↓

public static void SetData(int param)

{

    data = param;

}

使い方は下記のとおりです

int data= SceneTransition.GetData();//取得時

SceneTransition.SetData(data);//設定時

実際に使用している場面がこの画像になります。

SceneTransitionのところは、変数を保持しているクラス名を入れていればOKです

これで実行してみて、下の画像のような結果になっていればOKです。

シーン切り替え時のフリーズを防ぐ

ゲームの規模が大きくなってくると、シーン切り替え時に数秒間フリーズするようになります。

こうした挙動はプレイヤーにストレスを与えるほか、ゲームが落ちたのかと不安な気持ちにさせてしまいます。

代わりにSceneManager.LoadSceneAsyncを使用すると、バックグラウンドであらかじめロードしておくようになるので、ユーザー操作が中断されることなく切り替えを行うことができるようになります。

使い方はLoadSceneのときと全く同じです。

また、使い方次第では、ロード中のプログレスバーを表示することもできます。

そこまで規模が大きくないのであれば考慮しなくとも問題はないですが、シーン切り替え時のフリーズが目につくようになってきたら使用するようにしましょう。

シーン切り替えはゲームづくりの基本!

今回はシーン切り替えについて解説していきましたが、ゲーム起動3秒後には必要になる技術です。

しっかりと抑えて、より良いゲームづくりに活かしていきましょう!

Unity

Posted by ロク