LoginSignup
7
5

More than 1 year has passed since last update.

[UE4] Windowsのスリープ検出方法

Posted at

検証バージョン:UE4.27.2

 コンソールやモバイルOSにおいて、レジュームなどの操作によるゲームのバックグラウンド移行や解除を以下のイベントで検出することができます。

FCoreDelegates::ApplicationWillEnterBackgroundDelegate
FCoreDelegates::ApplicationHasEnteredForegroundDelegate

このイベントはUApplicationLifecycleComponentを利用してゲーム側でもトリガーすることができ、
以下のように実装することでバックグラウンド移行時にゲームポーズを適用するようなこともできます。

2021-12-21_13h51_39.png

 しかしながら、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);
}
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5