当前位置:   article > 正文

Unity3D Application模拟进入前后台及暂停_unity 后台运行

unity 后台运行

前言

在某些时候,unity程序进入后台运行,我们需要它暂停或关闭一些功能,例如当前正在播放的动画、视频、声音等等之类的,在下次回到unity程序时再接着运行。

这里我们需要用到两个unity的回调函数OnApplicationForcusOnApplicationPause,使用SendMessage方法发指令,模拟后台运行跟结束后台运行,自动调用OnApplicationForcusOnApplicationPause方法。

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=True

Kill进程:

当前应用双击Home,然后Kill:

OnApplicationQuit  (IOS 有回调,android 没回调)

跳出当前应用,然后Kill:

OnApplicationQuit  (IOS和Android都没回调)

下面转载于:https://www.jianshu.com/p/cfa0263ea1b9

最简单的暂停游戏的方式

Time.timeScale = 0;

当想继续游戏时

Time.timeScale = 1;

注意

当TimeScale被设置为0时,

  1. Update方法仍然会被调用
  2. FixedUpdate方法不会被调用
  3. Time.time不会继续增加
  4. 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;

模拟代码片段:

  1. void Update()
  2. {
  3. if (Input.GetKeyDown(KeyCode.A))
  4. SendMessageTest(true);
  5. else if (Input.GetKeyDown(KeyCode.S))
  6. SendMessageTest(false);
  7. }
  8. private void OnApplicationForcus(bool isForcus)
  9. {
  10. if (isForcus)
  11. {
  12. Debug.Log("isForcus:true");
  13. }
  14. else
  15. {
  16. Debug.Log("isForcus:false");
  17. }
  18. }
  19. private void OnApplicationPause(bool isPause)
  20. {
  21. if (isPause)
  22. {
  23. Debug.Log("isPause:true");
  24. Time.timeScale = 0;
  25. AudioListener.pause = true;
  26. }
  27. else
  28. {
  29. Debug.Log("isPause:false");
  30. Time.timeScale = 1;
  31. AudioListener.pause = false;
  32. }
  33. }
  34. void SendPause(bool isPause)
  35. {
  36. transform.SendMessage("OnApplicationPause", isPause, SendMessageOptions.DontRequireReceiver);
  37. }
  38. void SendForcus(bool isForcus)
  39. {
  40. transform.SendMessage("OnApplicationForcus", isForcus, SendMessageOptions.DontRequireReceiver);
  41. }
  42. public void SendMessageTest(bool pause)
  43. {
  44. if (pause)
  45. {
  46. SendPause(true);
  47. SendForcus(false);
  48. }
  49. else
  50. {
  51. SendPause(false);
  52. SendForcus(true);
  53. }
  54. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/633422
推荐阅读
相关标签
  

闽ICP备14008679号