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がない状態でも音声は鳴るものなのでしょうか?
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/09 06:14