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

41 篇文章 2 订阅

前言

在某些时候,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;

模拟代码片段:

    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);
        }
    }

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值