うら干物書き

ゲームを作っています。

【Unity】寝るな! 寝たら死ぬぞ!! 端末のスリープ時間を設定する

 iOSやAndroidの端末のスリープの時間をアプリのスクリプト上で設定する方法のメモ書きです。

 てっきり端末のスリープを設定するには、ネイティブコードでプラグインを書かねばいけないと思っていました。
 ただググって調べてみると、Unity側でサポートされており、C#でスクリプトをちょちょいと書けば設定できたことに驚いたので、今回筆を執った次第です

 では、早速使ってみましょう。
f:id:urahimono:20170611230525p:plain


この記事にはUnity5.6.1f1を使用しています。

 Unityで使う機能はコレ、Screen.sleepTimeout
docs.unity3d.com

 日本語訳版を説明を見る限り、

sleepTimeout は秒単位で測定されます。デフォルト値は プラットフォームにより異なり、通常 0 ではありません。

 とあるので、このScreen.sleepTimeoutにスリープになるまでの時間を設定してあげるだけでOKみたいです。
 ただ恐らく、スリープ関連で設定することと言えば、アプリ中にスリープさせるのかさせないのかが主な内容だと思います。
 そんなときにsleepTimeoutに設定すればいいパラメータとして、SleepTimeout.NeverSleepSleepTimeout.SystemSettingがあります。

SleepTimeout.NeverSleep
docs.unity3d.com

SleepTimeout.SystemSetting
docs.unity3d.com

  • SleepTimeout.NeverSleep
    スリープを行わない。
  • SleepTimeout.SystemSetting
    端末側で設定されているタイムアウト時間を使用する。

 これらを設定すれば、アプリ内でスリープにしたいときと、したくないときに切り替えれそうです。
 ただ、SleepTimeout.NeverSleepを使ってスリープさせないようにした際は、端末のスリープ設定を無視するわけですから、あんまり多用するのもよくなさそうですね。必要不可欠なタイミングで使っていきたいです。

 実際に使ってみました。

using UnityEngine;

public class TestComponent : MonoBehaviour
{
    private void Start()
    {
        Screen.sleepTimeout = SleepTimeout.NeverSleep;
    }

} // class TestComponent

f:id:urahimono:20170611230525p:plain

 うまくスリープをしなくなったのですが、このスクリーンショットではきっと何も伝わっていないと思います
 スリープを制御したい場合はご活用ください。