今回は、戦闘の実装に先立って、これまで作ってきたフィールドとは別に、戦闘シーンを作成して、フィールドと戦闘を切り替える管理シーン(マネージャーシーン)を準備します。
方針
シーンの加算ロードを利用して、起動時にフィールドと戦闘の両方をロードします。可視性はカメラで切り替えます。
加算シーンに関わるインターフェースは以下にまとめました。
tomo-mana.hatenablog.com
シーンの構成
フィールドと戦闘でシーンを分け、両方を切り替えるマネージャーシーンを用意します。
シーン(.Unityファイル)の作成
マネージャーシーンの作成
Projectウィンドウから、空のシーンを作成します。
(1) Projectウィンドウ:シーンが置かれたフォルダ上で右クリック > create
> scene
(2) 作成した Sceneファイル
上でクリック > rename
"ManagerScene" に変更
戦闘シーンの作成
Projectウィンドウから、空の戦闘シーンも作成しておきます。
(作業はマネージャーシーン作成時と同じ。"BattleScene"に変更)
フィールドシーンの名称変更
これまで作ってきたシーンも、"FieldScene"に名前を変えます。
BuildSettingsに登録
作成したシーンを読み出せるようにするには、BuildSettingsに登録が必要です。
(1) Unity画面のメニュー: File
> BuildSettings
(2) Build Settings ウィンドウ: Scenes In Build
欄に、ManagerScene、FieldScene、BattleScene の3つを追加(Projectウィンドウからドラッグ&ドロップ)
(3) 画面右上の×ボタンで画面を閉じます。(ドラッグ&ドロップした時点で登録されるようです)
各シーンの設計
戦闘シーン
戦闘シーンは、今の時点ではカメラだけOFFにしておきます。(フィールドのカメラを使用するため)
(1) Projectウィンドウ:BattleSceneを選択
(2) Inspectorウィンドウの open
ボタンを押してBattleSceneの編集画面にします。
(3) Hierarchyウィンドウ: Main Camera
を選択
(4) Inspectorウィンドウ: Main Camera
の横にあるチェックを外し、Main Camera
ゲームオブジェクト全体を非表示にします。
マネージャーシーン
マネージャーシーンから起動する時に、フィールドと戦闘の両方をロードする処理を追加します。フィールドのメインカメラをONにする処理も追加します。
(1) Hierarchyウィンドウ: [▼+
] > Create Empty
初回の動作だけさせるつもりなので、名前を Initializer にしました。
(2) Projectウィンドウ上で、C#スクリプトを作成
Start()
で フィールドと戦闘シーンの両方を非同期に読み込む処理と、読み込みが完了したらフィールドカメラをONにする処理とを追加します。
(3) (1)で作成したゲームオブジェクト (Initializer) に追加します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class ManagerSceneManager : MonoBehaviour { bool initialized = false; void Start() { // シーン起動 SceneManager.LoadSceneAsync("FieldScene", LoadSceneMode.Additive); SceneManager.LoadSceneAsync("BattleScene", LoadSceneMode.Additive); } void Update() { if( !initialized ){ if( SceneManager.GetSceneByName("FieldScene").isLoaded ){ Scene scene = SceneManager.GetSceneByName("FieldScene"); // フィールドシーンをアクティベート SceneManager.SetActiveScene(scene); // カメラON GameObject[] gameObjects = scene.GetRootGameObjects(); foreach( GameObject g in gameObjects ){ if( g.GetComponent<Camera>() != null ){ g.SetActive(true); break; } } initialized = true; } } } }
動作テスト
マネージャーシーンに切り替えて動作を確認します。
(1) Projectウィンドウ:ManagerSceneを選択
(2) Inspectorウィンドウ: open
を押してManagerSceneの編集画面にする
(3) 再生する
ManagerSceneから2つのシーンがロードされて、FieldSceneがアクティブになり、これまで通りキャラクターも動かせることを確認できました。
次回
戦闘画面の設計