質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

11371閲覧

UnityAdsを使用した動画広告の再生後にBGMが鳴らない件について

buibui80

総合スコア1033

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/06/19 09:51

編集2016/06/19 12:08

UnityAdsを使用した動画広告の実機テストをしているですが、
動画広告の再生後にゲーム用のBGMが鳴らない状態に陥っています。

<確認環境>
・OSX ElCapitan(‎10.11.5)
・Unity 5.3.5f1(フリー版)
・Android 5.1.1(Nexus5)
※実機のみの問題です(Editor上ではダミー広告により問題は生じません)。


Build & Run時にDevelopment Buildを有効にしてプロファイラで確認した所、
UnityAdsの動画広告を表示するまでは
AudioListenerのVolumeが数値で表示され、問題なくBGMも鳴るのですが、
イメージ説明

動画広告が再生された後では
AudioListenerのVolumeがマイナス無限大となりBGMが鳴らない状態になります。
イメージ説明

この状態でBGMを再生すると、
AudioSourceのAudibilityもAudioListenerの影響を受けてマイナス無限大となってしまいます。
(AudioObjectというGameObjectにAudioSourceをアタッチ&再生しています)
イメージ説明


確認ソースは以下の通りです。
※Editor上ではダミー広告により問題は生じません、実機にてご確認ください。

C#

1using UnityEngine; 2using UnityEngine.UI; 3using System.Collections; 4using UnityEngine.Advertisements; 5 6 7public class AudioController : MonoBehaviour 8{ 9 10 void Update() 11 { 12 ShowAudioStatus(); 13 ShowUnityAdsStatus(); 14 } 15 16 17 //*************************************************************************** 18 // Audio 19 //*************************************************************************** 20 21 22 public AudioSource audioSource = null; 23 public Text AudioStatusText = null; // ログ出力用uGUIのText 24 25 26 private void ShowAudioStatus() 27 { 28 if (audioSource == null || 29 AudioStatusText == null) return; 30 31 AudioStatusText.text = "[AudioSource] [isPlaying] " + audioSource.isPlaying; 32 AudioStatusText.text += "\n[AudioSource] [volume] " + audioSource.volume; 33 AudioStatusText.text += "\n[AudioSource] [mute] " + audioSource.mute; 34 AudioStatusText.text += "\n[AudioListener] [pause] " + AudioListener.pause; 35 AudioStatusText.text += "\n[AudioListener] [volume] " + AudioListener.volume; 36 AudioStatusText.text += "\n[AudioListener] [check] " + CheckAudioListener(); 37 if (Camera.main.gameObject.GetComponent<AudioListener>() != null) 38 AudioStatusText.text += "\n[AudioListener] [enabled] " + Camera.main.gameObject.GetComponent<AudioListener>().enabled; 39 } 40 41 42 private string CheckAudioListener() 43 { 44 // どこかのGameObjectにAudioListenerが存在するか? 45 string names = ""; 46 foreach (GameObject obj in UnityEngine.Object.FindObjectsOfType(typeof(GameObject))) 47 { 48 if (obj.activeInHierarchy && obj.GetComponent<AudioListener>()) 49 { 50 names += obj.name + ", "; 51 } 52 } 53 return names; 54 } 55 56 57 /// <summary> 58 /// ボタンイベント 59 /// </summary> 60 public void OnAudioSourcePlay() 61 { 62 audioSource.Play(); 63 } 64 public void OnAudioSourceStop() 65 { 66 audioSource.Stop(); 67 } 68 public void OnAudioSourceMuteOn() 69 { 70 audioSource.mute = true; 71 } 72 public void OnAudioSourceMuteOff() 73 { 74 audioSource.mute = false; 75 } 76 public void OnAudioListenerPause() 77 { 78 AudioListener.pause = true; 79 } 80 public void OnAudioListenerUnPause() 81 { 82 AudioListener.pause = false; 83 } 84 public void OnAudioListenerAdd() 85 { 86 Camera.main.gameObject.AddComponent<AudioListener>(); 87 } 88 public void OnAudioListenerRemove() 89 { 90 Destroy( Camera.main.gameObject.GetComponent<AudioListener>() ); 91 } 92 93 94 //*************************************************************************** 95 // Unity Ads 96 //*************************************************************************** 97 98 99 public Text UnityAdsStatusText = null; // ログ出力用uGUIのText 100 101 102 private void ShowUnityAdsStatus() 103 { 104 if (UnityAdsStatusText == null) return; 105 UnityAdsStatusText.text = "[isSupported] " + Advertisement.isSupported; 106 UnityAdsStatusText.text += "\n[isShowing] " + Advertisement.isShowing; 107 UnityAdsStatusText.text += "\n[IsReady] " + Advertisement.IsReady(); 108 UnityAdsStatusText.text += "\n[IsReady] [zone] " + Advertisement.IsReady("rewardedVideo"); 109 } 110 111 112 private bool CheckUnityAds() 113 { 114 return (Advertisement.isSupported && !Advertisement.isShowing); 115 } 116 117 118 public void ShowUnityAdsSimpleAd() 119 { 120 if (!CheckUnityAds()) return; 121 122 if (Advertisement.IsReady()) 123 { 124 var options = new ShowOptions { 125 resultCallback = HandleShowResult 126 }; 127 Advertisement.Show(null, options); 128 } 129 else 130 { 131 Debug.Log("ShowUnityAdsSimpleAd: No"); 132 } 133 } 134 135 136 public void ShowUnityAdsRewardedAd() 137 { 138 if (!CheckUnityAds()) return; 139 140 if (Advertisement.IsReady("rewardedVideo")) 141 { 142 var options = new ShowOptions { 143 resultCallback = HandleShowResult 144 }; 145 Advertisement.Show("rewardedVideo", options); 146 } 147 else 148 { 149 Debug.Log("ShowUnityAdsRewardedAd: No"); 150 } 151 } 152 153 154 private void HandleShowResult(ShowResult result) 155 { 156 switch (result) 157 { 158 case ShowResult.Finished: 159 Debug.Log("Finished"); 160 break; 161 case ShowResult.Skipped: 162 Debug.Log("Skipped before reaching the end."); 163 break; 164 case ShowResult.Failed: 165 Debug.LogError("Failed."); 166 break; 167 } 168 } 169 170 171}

AudioListenerやAudioSourceのvolumeをUpdate毎にuGUIテキストへ出力してみましたが、
マイナス無限大ではなく元々の値が得られています。
また、AudioSourceの再プレイやミュート、AudioListenerのポーズによる変化を確認したり、
AudioListenerのRemove・Addをしてみましたが関係がありませんでした。

そこで質問ですが、
UnityAdsの動画広告の再生後にBGMが鳴らない原因と改善方法について教えて頂けないでしょうか?

もう1点、
AudioListenerをRemoveした状態でaudioSource.Play()を実行すると
AudioListenerがシーンに存在しないままBGMが鳴ることを確認したのですが、
AudioListenerがない状態でも音声は鳴るものなのでしょうか?

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Unity5.3.5p5を試した所、
UnityAdsの動画広告によるBGMが鳴らない問題は改善しました。
https://unity3d.com/jp/unity/qa/patch-releases

しかし新たな問題として、Lineや時計のアラームなどの通知を受信した時に、
ボリュームがマイナス無限大となり鳴らない状態になりました。
確認できていませんが電話の受信も影響があるかもしれません。

Unity5.3.5p5のISSUE TRACKERにてその問題が指摘されていました。
https://issuetracker.unity3d.com/issues/android-slash-audio-android-app-stops-playing-audio-at-all-if-another-app-takes-audio-focus?_ga=1.107300930.1966455942.1464786892&page=1#comments

過去バージョンのUnity5.3.4f1では問題なかったので、
新しいパッチを待ちつつ当面はUnity5.3.4f1で作業しようと思います。

なお、
AudioListenerがシーンに存在しないままBGMが鳴る件については、
Editor上でAudioListenerがシーンに存在しないままaudioSource.Play()を実行すると、

There are no audio listeners in the scene. Please ensure there is always one audio listener in the scene

とAudioListenerが必要だとログ出力され続けてBGMは鳴りませんが、
Androidでは何故かBGMは鳴ります。
この件については別の質問にしようと思います。

投稿2016/06/27 06:20

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問