facebook twitter hatena line email

「Unity/ライフサイクル」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(OnApplicationFocus挙動)
(フォア・バックの切り替え判定)
 
(同じ利用者による、間の20版が非表示)
行31: 行31:
 
}
 
}
 
</pre>
 
</pre>
androidとiOS両方で機能することを確認。
+
*androidとiOS両方で機能することを確認。
 +
*画面遷移時には動作しない。
 +
 
 +
*iOSについて、OnApplicationPauseは、起動時、Start()、よりも遅く動作します。
 +
*Androidについて、OnApplicationPauseは、起動時、Start()、よりも早く動作します。
 +
 
 +
*iOSでは、端末下から上スワイプで、画面を小さくしたタイミングで、pauseするが、
 +
*Androidでは、端末下から上スワイプで、画面を小さくして、別のアプリを選択したタイミングで、pauseする
 +
*ちなみに、Androidは、端末下から上スワイプで、画面を小さくして、そのままタスクキルでも、pauseする
 +
*両方osともに、pauseフラグが立たないと、戻したときにイベントが発生しない。
  
注意:
 
OnApplicationPauseは、起動時、Start()、よりも早く動作します。
 
 
==OnApplicationFocusの挙動==
 
==OnApplicationFocusの挙動==
 
<pre>
 
<pre>
行42: 行49:
 
}
 
}
 
</pre>
 
</pre>
アプリをバックグランドにするとfalse、フォアに戻すとtrueな挙動
+
*動作タイミングはOnApplicationPauseと同じ。
 +
*アプリをバックグランドにするとfalse、フォアに戻すとtrueな挙動
 +
*画面遷移時には動作しない。
 +
 
 +
*iOSでは、OnApplicationFocusが、起動時、動作しない。
 +
*Androidでは、OnApplicationFocusは、起動時、Start()、よりも早く動作します。
 +
*iOS/Androidともに、端末下から上スワイプで、画面を小さくしたタイミングで、focusがfalseになる
 +
 
 +
起動時のOnApplicationFocusは、OSごとに処理が違うので使えない。Focusしない時は、動作するので使える。
  
 
==シーン切り替え==
 
==シーン切り替え==
行50: 行65:
 
  OnApplicationPause
 
  OnApplicationPause
 
  OnApplicationQuit
 
  OnApplicationQuit
 +
 +
==OnApplicationQuitについて==
 +
バックグラウンド切替処理に対して、
 +
iOSでは実行されるが、Androidでは実行されない。
 +
 +
==ライフサイクルを無視して一番最初に実行==
 +
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]をつければ、csを、割り当てなくても実行される。staticをつけておく必要あり。
 +
<pre>
 +
public class InitScript : MonoBehaviour
 +
{
 +
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
 +
    static void Bootstrap()
 +
    {
 +
        Debug.Log("Bootstrap!!");
 +
    }
 +
}
 +
</pre>

2024年8月29日 (木) 14:51時点における最新版

ライフサイクル

だいたいこんな感じ

Reset()
Awake()
OnEnable()
Start()
FixedUpdate()
Update()
OnDisable()
OnDestroy()

詳細は

公式:https://docs.unity3d.com/ja/2020.1/Manual/ExecutionOrder.html

Unity初心者講座:ライフサイクルを正しく覚える https://watablog.tech/2019/09/20/post-492/

フォア・バックの切り替え判定

void OnApplicationPause(bool status)
{
        if (status)
        {
            Debug.Log("OnApplicationPause pause");
        }
        else
        {
            Debug.Log("OnApplicationPause resume");
        }
}
  • androidとiOS両方で機能することを確認。
  • 画面遷移時には動作しない。
  • iOSについて、OnApplicationPauseは、起動時、Start()、よりも遅く動作します。
  • Androidについて、OnApplicationPauseは、起動時、Start()、よりも早く動作します。
  • iOSでは、端末下から上スワイプで、画面を小さくしたタイミングで、pauseするが、
  • Androidでは、端末下から上スワイプで、画面を小さくして、別のアプリを選択したタイミングで、pauseする
  • ちなみに、Androidは、端末下から上スワイプで、画面を小さくして、そのままタスクキルでも、pauseする
  • 両方osともに、pauseフラグが立たないと、戻したときにイベントが発生しない。

OnApplicationFocusの挙動

void OnApplicationFocus(bool hasFocus)
{
    Debug.Log("OnApplicationFocus " + hasFocus);
}
  • 動作タイミングはOnApplicationPauseと同じ。
  • アプリをバックグランドにするとfalse、フォアに戻すとtrueな挙動
  • 画面遷移時には動作しない。
  • iOSでは、OnApplicationFocusが、起動時、動作しない。
  • Androidでは、OnApplicationFocusは、起動時、Start()、よりも早く動作します。
  • iOS/Androidともに、端末下から上スワイプで、画面を小さくしたタイミングで、focusがfalseになる

起動時のOnApplicationFocusは、OSごとに処理が違うので使えない。Focusしない時は、動作するので使える。

シーン切り替え

OnDisable()
OnDestroy()

シーン切替時に、上記は実行されるが、以下は、シーン切替時には実行されず、停止、終了したときのみ実行される。

OnApplicationPause
OnApplicationQuit

OnApplicationQuitについて

バックグラウンド切替処理に対して、 iOSでは実行されるが、Androidでは実行されない。

ライフサイクルを無視して一番最初に実行

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]をつければ、csを、割り当てなくても実行される。staticをつけておく必要あり。

public class InitScript : MonoBehaviour
{
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    static void Bootstrap()
    {
        Debug.Log("Bootstrap!!");
    }
}