検証バージョン:UE4.27.2
コンソールやモバイルOSにおいて、レジュームなどの操作によるゲームのバックグラウンド移行や解除を以下のイベントで検出することができます。
FCoreDelegates::ApplicationWillEnterBackgroundDelegate
FCoreDelegates::ApplicationHasEnteredForegroundDelegate
このイベントはUApplicationLifecycleComponentを利用してゲーム側でもトリガーすることができ、
以下のように実装することでバックグラウンド移行時にゲームポーズを適用するようなこともできます。
しかしながら、Windowsのスリープイベントはデフォルトでは検出することができません。
これを適用したい場合は、以下のエンジンコードに電源管理イベントの処理を追加することでスリープ実行/解除時にも同様の処理を適用することが可能です。
WindowsApplication.cpp
int32 FWindowsApplication::ProcessMessage( HWND hwnd, uint32 msg, WPARAM wParam, LPARAM lParam )
{
if( Windows.Num() && CurrentNativeEventWindowPtr.IsValid() )
{
switch(msg)
{
//...
//ここから
case WM_POWERBROADCAST: // 電源管理イベント
{
switch (wParam)
{
case PBT_APMRESUMEAUTOMATIC: // スリープ復帰
FCoreDelegates::ApplicationHasEnteredForegroundDelegate.Broadcast();
break;
case PBT_APMSUSPEND: // スリープ移行
FCoreDelegates::ApplicationWillEnterBackgroundDelegate.Broadcast();
break;
default:
break;
}
}
break;
//ここまで
//...
return DefWindowProc(hwnd, msg, wParam, lParam);
}