徳島ゲーム開発ごっこ 技術ブログ

ゲームを作るために役に立ったり立たなかったりする技術を学んでいきます!

【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

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