赞
踩
在某些时候,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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。