かさたな日記

主にUnityを使った制作記録。書いてる人は初心者です。一緒に頑張ろう。

第2回unityroomゲームジャム

unityroomさんの一週間ゲームジャム第2回、
お題『転がる』に参加させていただきました。


ほかの参加者さんのブログを閲覧させてもらうと
自分が如何に何も考えていないかよくわかるけど、
そこはとりあえず今は気にしない方向で...。


今回のクラス構造はこんな感じでした。
f:id:kasatanet:20170529191450p:plain


右下の方、ゲームにADVモードを挟んだり
フェード演出からの非同期ロードしたりするモジュールなのですが
今回のゲームでは動いてない機能があるので
メモリを無駄に浪費しているかもしれません。
(でも分割するとCanvas増えちゃう....)

自分用Unityメモ:シーンロード時に処理を行う

新しくシーンを読み込んだ時に
何か処理をしたいときは、

OnLevelWasLoaded というAPIを使えばいいみたい。

……と、思っていたのですが、どうやらこれは旧型式で
5.4あたりから非推奨になったみたいです。
(しかも、そのうち消すから使うなって書いてあるよ。あるいは書いてあった。)

じゃあどうするかというと、
SceneManagerのデリゲートを使えばいいみたい。
(※デリゲートはメソッドの入る変数みたいなものです(語弊あり))

・activeSceneChanged  //アクティブのシーンが切り替わったときに呼ばれる
・sceneLoaded //シーンがロードされたときに呼ばれる
・sceneUnloaded //シーンがアンロードされたときに呼ばれる


使い方の例としては……

    void OnSceneLoaded(Scene loaded)
    {
        Debug.Log(loaded + "がロードされたよ");
    }

こんな感じのメソッドを用意しておいて、
(メソッドの名前に決まりはないよ)
マネージャーのAwake()、Start()あたりに

SceneManager.sceneLoaded += OnSceneLoaded;

とか記述しておいてあげればロード時に処理をしてくれるはず。



今のゲームで使っているのは
sceneUnloadedの方で、シーン切り替え時に
使い終わったオブジェクトのプールを削除したりしてます。