Unity起動前に何か処理をしたい場合の対応

ゲームを作っているとき、ゲーム起動時にAwakeよりも早く初期化を行いたいことが起こることがあります。

今回はそんな場合に対応する方法と注意点と記載していきたいと思います。

方法

方法はいたってシンプル

匿名希望の英雄で使用している具体例は以下の通りです。

public class BootScene : MonoBehaviour
{
    [SerializeField]
    private eSceneName m_startScene = eSceneName.Title;

    [RuntimeInitializeOnLoadMethod()]
    static void Init()
    {
        //シーン切替 .
        SceneManager.LoadScene(eSceneName.Boot.ToString());
    }

    void Awake()
    {
	Application.targetFrameRate = 60;
	FadeManager.Instance.LoadScene(m_startScene, 0f);
    }
}

具体的にはここです



  [RuntimeInitializeOnLoadMethod()]
  static void Init()
  {
      //シーン切替 .
      SceneManager.LoadScene(eSceneName.Boot.ToString());
  }

staticの関数の上にこれをつけるだけです。



  [RuntimeInitializeOnLoadMethod()]

これをつけることで Init() アプリ起動時に真っ先に実行されるようになります。

動作の説明

ちなみにこのスクリプト 「BootScene 」はこの通り

Bootというシーンのコンポーネントにセットされてます。

この 「BootScene 」 の挙動は

  • ゲームが起動時にInitが実行される
  • Initという処理内で Bootという名前のシーンが読み込まれる
  • 「BootScene」のAwakeが呼び出される
  • Awakeでフレームを60FPSに固定インスペクターで設定したシーンが読み込まれる

(この場合はTitleですね)

要約すると。

アプリ起動時にUnityの60FPSに固定した上でタイトルを表示する

やってることはかなりシンプルですが、あらかじめこうした処理をつけておくと

  • アプリ起動に何かのアカウントにログイン
  • ボリュームの初期化
  • 起動前の改ざんチェック

等々の処理をひとまとめに記載できるようになるので非常に便利かと思われます。

デメリットもしくは非推奨事項

便利な機能ですが、絶対にお勧めできない方法アあります。

それは



  [RuntimeInitializeOnLoadMethod()]

これを乱用しないことです。むしろ一つだけにする

これが複数あると非常に面倒なことになります。

例えば、以下のようなことになるとどのシーンに飛ぶでしょうか?


  絶対にまねはしてはいけない!
    [RuntimeInitializeOnLoadMethod()]
    static void Init()
    {
        //シーン切替 .
        SceneManager.LoadScene(eSceneName.Boot.ToString());
    }



    [RuntimeInitializeOnLoadMethod()]
    static void Init()
    {
        //シーン切替 .
        SceneManager.LoadScene(eSceneName.Title.ToString());
    }

正直見当もつきません。

ですのでこのような不確定な要素は追加しないようにしましょう。

まとめ

アプリ起動前に処理を追加する場合、

非常に便利な機能で、いろいろ応用が利くので必要な場合は使用していくべきですが、

絶対に一つだけにしましょう。


コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
vuniformity誰でもない人
トレンドの行く末を見守っている
仮名を名乗るエンジニア

ゲーム開発は仕事であり趣味である
プログラムだけでなく多種多様なスキルを数多く持つ

ゲーム開発は
ソーシャルゲームを開発運用の経験アリ
ゲーム以外にも経験アリ
Webサービス保守開発等に携わる

ゲームプレイの主な戦場は
FGO
FEH
MTGA
マビノギ
ここでは主にunityroomで公開しているゲーム作り直しの軌跡を綴っていきます