Unity5.3から実装されたSceneManagerでソーシャルゲームによくあるUIを実装していきます
基本編はこちら
UnityでSceneManagerを使う(基本編その1) - スマゲ
UnityでSceneManagerを使う(基本編その2) - スマゲ
■完成イメージ
~ 実装 ~
■基本シーン作成
Unityで新規プロジェクトを作成後新しいシーンを作成します。名前は適当にBaseにしました
UnityのuGUIでボタンを5個作成し、いい感じにします
■メインシーンを定義する
Enumを利用してメインとなるシーンを定義します
public enum MainScene{ Friend, Gacha, Monster, Quest, Shop }
■メインシーンを作成する
定義したシーン名と同じ名前でシーンを作成します。これらのシーンは基本シーンに追加される形でロードされるのでEventSystem, Cameraは削除しておきます
■メインシーンを管理するクラスを作る
using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; public class SceneHolder : MonoBehaviour { // ロードされているシーンを保持する Scene LoadedScene; // 最初のシーンをロードする void Start(){ LoadMainScene(MainScene.Quest); } // メインのシーンをロードする public void LoadMainScene(MainScene scene){ SceneManager.UnloadScene(LoadedScene.name); SceneManager.LoadScene(scene.ToString(), LoadSceneMode.Additive); LoadedScene = SceneManager.GetSceneByName(scene.ToString()); } }
■フッターのボタン用スクリプトを作成する
using UnityEngine; using UnityEngine.UI; using System.Collections; public class FooterButton : MonoBehaviour { // ロードしたいシーンを設定する public MainScene scene; // ボタンを押下した時の処理を設定する void Start(){ GetComponent<Button>().onClick.AddListener(LoadScene); } // メインのシーンをロードする public void LoadScene(){ FindObjectOfType<SceneHolder>().LoadMainScene(scene); } }
■基本シーンに各スクリプトを設定する
基本シーンに空のゲームオブジェクトを作成、作成したSceneHolderをAddComponentします
基本シーンに作成したボタンそれぞれにFooterButtonをAddComponentして遷移したいシーンをFooterButtonのプルダウンから設定します
■この実装方法のメリット
・必要なシーン部分のみロード、アンロードするので遷移が早い
・メインシーン毎にシーンファイルを分けるので多人数開発はし易い
・基本シーンに全部詰め込む設計にならないので、依存性が低く、保守が容易
■Github
github.com
■まとめ
いまは基本シーンのみの遷移なので今後は重複可能のシーン(メニュー画面、ポップアップなど)を上手く組み合わせる方法を考えていきたいと思います