LoginSignup
19
10

More than 5 years have passed since last update.

Chrome 66でUnity WebGLビルドの音が鳴らない状況を緩和する

Last updated at Posted at 2018-04-16

何が起きているのか

Chromeのバージョン66から、ビデオ・オーディオの自動再生のポリシーが変更されました。
現状はユーザーがクリックかタップでオーディオのサスペンド状態を解除しないといけなくなりました。

Autoplay Policy Changes
https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#webaudio

Chrome On The Dev Branch (version 66) May Block Audio For Unity WebGL
https://forum.unity.com/threads/chrome-on-the-dev-branch-version-66-may-block-audio-for-unity-webgl.517758/

で、これに現状Unityが対応してないので完全に音が鳴りません。

※4/17追記
しかも、この自動再生の可否はユーザーごとに変化するため、デバッグ時に気が付かないことがあります。
Chrome 66ではMEI(Media Engagement Index)という仕組みによって内部で動画・音声が再生されるサイト上での挙動が記録され、ユーザーごとにスコアリングされます。
この数値をもとに、自動再生を許可するかしないか判定する仕組みです。

参考:Safari, Chromeの自動再生ポリシー変更のまとめ
https://qiita.com/ktknest/items/e81b3a4caac540098fc8

なお66は今ベータですが、4/17米国時間で正式リリースされます。やばい。

forumは超キレている人がいたりして荒れてます...

回避(緩和)方法

WebGLビルド用のjsファイルをいじるとある程度緩和できます。

修正対象ファイル

[Unityインストール位置]\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\Audio.js

修正前


JS_Sound_Init: function()
{
    try {
        window.AudioContext = window.AudioContext||window.webkitAudioContext;
        WEBAudio.audioContext = new AudioContext();
        WEBAudio.audioWebEnabled = 1;
    }
    catch(e) {
        alert('Web Audio API is not supported in this browser');
    }
},

修正後

JS_Sound_Init: function()
{
    try {
        window.AudioContext = window.AudioContext||window.webkitAudioContext;
        WEBAudio.audioContext = new AudioContext();
        WEBAudio.audioWebEnabled = 1;
        var wakeupWebAudio = function() {
            if (WEBAudio.audioContext.state === "suspended") {
                WEBAudio.audioContext.resume();
            }
            document.removeEventListener("click", wakeupWebAudio);
            document.removeEventListener("touchend", wakeupWebAudio);
            document.removeEventListener("keydown", wakeupWebAudio);
        };
        document.addEventListener("click", wakeupWebAudio);
        document.addEventListener("touchend", wakeupWebAudio);
        document.addEventListener("keydown", wakeupWebAudio);
    }
    catch(e) {
        alert('Web Audio API is not supported in this browser');
    }
},

※4/17修正: wilfremさんのコメントのご指摘で修正しました

編集が終わたたら、普通にWebGLビルドします。
この対処を行ったとしてもページを開いた直後はやっぱり音は出ないので、一回どこかをクリックかタップもしくはキーを入力してもらう必要があります。(つらい..

Unity issue tracker立ってます

エンジン側で根本解決してもらうためにも、issue trackerのチケットが余ってる人は突っ込んでくださいませ。

19
10
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10