首页 > 解决方案 > unity3d webgl 在选项卡或浏览器不活动时静音

问题描述

当标签或浏览器处于非活动状态时,有谁知道在游戏中静音的正确方法?

我试图通过这种方式(通过 JS 库)做到这一点

var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") {
    hidden = "hidden";
    visibilityChange = "visibilitychange";
} else if (typeof document.mozHidden !== "undefined") {
    hidden = "mozHidden";
    visibilityChange = "mozvisibilitychange";
} else if (typeof document.msHidden !== "undefined") {
    hidden = "msHidden";
    visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
    hidden = "webkitHidden";
    visibilityChange = "webkitvisibilitychange";
}

document.addEventListener(visibilityChange, handleVisibilityChange, false);

function handleVisibilityChange() {
    $("video").prop('muted', document[hidden]);
}

但它不适合我。谢谢你。

标签: javascriptunity3d

解决方案


不确定,但您可能可以在 Unity 中的控制器组件上使用OnApplicationFocus和。OnApplicationPause

然后它可以通过简单地设置AudioListener.pauseAudioListener.volume相应地启用和禁用所有声音

public class FocusSoundController : MonoBehaviour
{
    void OnApplicationFocus(bool hasFocus)
    {
        Silence(!hasFocus);
    }

    void OnApplicationPause(bool isPaused)
    {
        Silence(isPaused);
    }

    private void Silence(bool silence)
    {
        AudioListener.pause = silence;
        // Or / And
        AudioListener.volume = silence ? 0 : 1;
    }
}

推荐阅读