유니티 WebGL 안드로이드 백그라운드 진입 시 오디오 OFF 3초 지연

mergeInto(LibraryManager.library, {
  AIT_StartObserveVisibility: function (goPtr, methodPtr) {
    var goName = UTF8ToString(goPtr);
    var method = UTF8ToString(methodPtr);

    // 이전 구독 해제
    if (typeof window.__tossVisUnsub === 'function') {
      try { window.__tossVisUnsub(); } catch (e) {}
      window.__tossVisUnsub = null;
    }
    
    function send(state, evt) {
      var payload = JSON.stringify({
        state: state, // "visible" | "hidden"
        eventType: evt, // "visibilitychange" | "pagehide" | "pageshow" | "blur" | "focus" | "init"
        hidden: state === 'hidden',
        ts: Date.now()
      });
      try { SendMessage(goName, method, payload); } catch (e) {}
    }

    // 캡처 단계로 가장 먼저 잡는다(숨기기 직전에도 최대한 빨리 유니티 호출)
    var opts = { capture: true, passive: true };

    function onVisibility() { send(document.hidden ? 'hidden' : 'visible', 'visibilitychange'); }
    function onPageHide()   { send('hidden',  'pagehide'); }
    function onPageShow()   { send('visible', 'pageshow'); }
    function onBlur()       { send(document.hidden ? 'hidden' : 'visible', 'blur'); }
    function onFocus()      { send(document.hidden ? 'hidden' : 'visible', 'focus'); }
    function onFreeze()     { send('hidden', 'freeze'); }
    
    // 이벤트 구독
    document.addEventListener('visibilitychange', onVisibility, opts);
    window.addEventListener('pagehide', onPageHide, opts);
    window.addEventListener('pageshow', onPageShow, opts);
    window.addEventListener('blur', onBlur, opts);
    window.addEventListener('focus', onFocus, opts);
    window.addEventListener('freeze', onFreeze, opts);

    // 초기 1회 상태 통지(필요 시)
    send(document.hidden ? 'hidden' : 'visible', 'init');

    // 이벤트 구독 해제 함수 정의
    window.__tossVisUnsub = function () {
      document.removeEventListener('visibilitychange', onVisibility, opts);
      window.removeEventListener('pagehide', onPageHide, opts);
      window.removeEventListener('pageshow', onPageShow, opts);
      window.removeEventListener('blur', onBlur, opts);
      window.removeEventListener('focus', onFocus, opts);
      window.removeEventListener('freeze', onFreeze, opts);
    };
  }
});

// C# 코드
public void OnFocus(bool isFocus)
{
	DebugUtil.Log($"[SystemManager] OnFocus({isFocus})");
	
	if (isFocus) // Foreground
	{
		// 사운드 Resume
		AudioListener.pause = false;
		
		// 게임 Resume
		Time.timeScale = _originTimeScale;
		
		_onForeground?.Invoke();
	}
	else // Background
	{
		// 사운드 Pause
		AudioListener.pause = true;
		
		// 게임 Pause
		_originTimeScale = Time.timeScale;
		Time.timeScale = 0;
		
		_onBackground?.Invoke();
	}
}