何が起きているのか
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のチケットが余ってる人は突っ込んでくださいませ。