Unity3D Application模拟进入前后台及暂停
Posted WenHuiJun_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D Application模拟进入前后台及暂停相关的知识,希望对你有一定的参考价值。
前言
在某些时候,unity程序进入后台运行,我们需要它暂停或关闭一些功能,例如当前正在播放的动画、视频、声音等等之类的,在下次回到unity程序时再接着运行。
这里我们需要用到两个unity的回调函数OnApplicationForcus和OnApplicationPause,使用SendMessage方法发指令,模拟后台运行跟结束后台运行,自动调用OnApplicationForcus和OnApplicationPause方法。
Unity3D Windows版本若要关闭后台运行,可在PlayerSetting中,取消Run In Background即可。
下面转载于:https://blog.csdn.net/aa4790139/article/details/48087877
正常进:
OnApplicationFocus, isFocus=True
正常退:
OnApplicationQuit
Home出:OnApplicationPause, isPause=True
OnApplicationFocus, isFocus=False
Home进:
OnApplicationPause, isPause=False
OnApplicationFocus, _isFocus=TrueKill进程:
当前应用双击Home,然后Kill:
OnApplicationQuit (ios 有回调,android 没回调)
跳出当前应用,然后Kill:
OnApplicationQuit (IOS和Android都没回调)
下面转载于:https://www.jianshu.com/p/cfa0263ea1b9
最简单的暂停游戏的方式
Time.timeScale = 0;
当想继续游戏时
Time.timeScale = 1;
注意
当TimeScale被设置为0时,
- Update方法仍然会被调用
- FixedUpdate方法不会被调用
- Time.time不会继续增加
- Time.deltaTime会被影响
若不想受TimeScale影响
Time.unscaledDeltaTime 替换 Time.deltaTime
Time.fixedUnscaledDeltaTime 替换 Time.fixedDeltaTime
Time.unscaledTime 替换 Time.time协程
用Time.unscaledDeltaTime 替换 Time.deltaTime
用WaitForSecondsRealtime 替换 WaitForSeconds动画控制器
CullingMode设置为UnscaledTime
如何暂停音频播放
AudioListener.pause = true;
当结束暂停时
AudioListener.pause = false;
如果想在暂停时继续播放某些音效该咋办?
AudioSource.ignoreListenerPause = true;
模拟代码片段:
void Update()
if (Input.GetKeyDown(KeyCode.A))
SendMessageTest(true);
else if (Input.GetKeyDown(KeyCode.S))
SendMessageTest(false);
private void OnApplicationForcus(bool isForcus)
if (isForcus)
Debug.Log("isForcus:true");
else
Debug.Log("isForcus:false");
private void OnApplicationPause(bool isPause)
if (isPause)
Debug.Log("isPause:true");
Time.timeScale = 0;
AudioListener.pause = true;
else
Debug.Log("isPause:false");
Time.timeScale = 1;
AudioListener.pause = false;
void SendPause(bool isPause)
transform.SendMessage("OnApplicationPause", isPause, SendMessageOptions.DontRequireReceiver);
void SendForcus(bool isForcus)
transform.SendMessage("OnApplicationForcus", isForcus, SendMessageOptions.DontRequireReceiver);
public void SendMessageTest(bool pause)
if (pause)
SendPause(true);
SendForcus(false);
else
SendPause(false);
SendForcus(true);
以上是关于Unity3D Application模拟进入前后台及暂停的主要内容,如果未能解决你的问题,请参考以下文章
使用 Unity3D 写入 HoloLens 2 上的 Application.persistentDataPath,然后通过设备门户网站访问文件
Unity3D鼠标控制摄像机“左右移动控制视角+WASD键盘控制前后左右+空格键抬升高度”脚本