前提・実現したいこと
UnityでAdmobのリワード広告を使おうと思ったのですが、用途がゲームの復活やアイテムゲットなどで複数あるので、ダウンロードの節約や、読み込み時間をなくそうという考えで、広告読み込みたびにRewardAdインスタンスを作るのではなくSingletonとして共有化し、一度広告をダウンロードしたら、それを使い切るまで保持しておこうと思い実装を変更しました。
しかし、ちゃんと登録できていないのか、Eventが呼び出されません。どうすれば呼び出せるようになるでしょうか?
また、こうした方法についての記載が探しても出ないということはメモリ(や広告の寿命的に?)非効率だから誰もやっていないだけなんでしょうか?
C#
1 2 //https://developers.google.com/admob/unity/rewarded-ads?hl=ja 3 //サンプル等では使うたびにインスタンスを作っている 4 private RewardedAd rewardedAd; 5 ... 6 7 public void Start() 8 { 9 ... 10 11 this.rewardedAd = new RewardedAd(adUnitId); 12 13 // Create an empty ad request. 14 AdRequest request = new AdRequest.Builder().Build(); 15 // Load the rewarded ad with the request. 16 this.rewardedAd.LoadAd(request); 17 } 18} 19
→
C#
1//共有化したRewardAd等を保持しているクラス 2public class AdmobConfig { 3 #region Singleton 4 private static readonly AdmobConfig instance = new AdmobConfig(); 5 private AdmobConfig(){} 6 public static AdmobConfig Instance { get { return instance; } } 7 #endregion 8 //Information 9 public RewardedAd rewardedAd; //Use all scene 10... 11 //rewardedAdの初期化など 12} 13
該当のソースコード
C#
1ublic class RouletteAdmob : MonoBehaviour { 2 bool isSet; 3 4 void OnDisable() { 5 if(!isSet){ 6 return; 7 } 8 isSet = false; 9 AdmobConfig.Instance.rewardedAd.OnAdLoaded -= HandleRewardedAdLoaded; 10 AdmobConfig.Instance.rewardedAd.OnAdFailedToLoad -= HandleRewardBasedVideoFailedToLoad; 11 AdmobConfig.Instance.rewardedAd.OnAdOpening -= HandleRewardedAdOpening; 12 AdmobConfig.Instance.rewardedAd.OnAdClosed -= HandleRewardBasedVideoClose; 13 AdmobConfig.Instance.rewardedAd.OnUserEarnedReward -= HandleUserEarnedReward; 14 } 15 ///使うときに他クラスから呼ぶ 16 public void RegisterAdmobEvent() { 17 isSet = true; 18 AdmobConfig.Instance.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; 19 AdmobConfig.Instance.rewardedAd.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad; 20 AdmobConfig.Instance.rewardedAd.OnAdOpening += HandleRewardedAdOpening; 21 AdmobConfig.Instance.rewardedAd.OnAdClosed += HandleRewardBasedVideoClose; 22 AdmobConfig.Instance.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; 23 } 24}
試したこと
外部のクラスだから正確に関数が渡せてないのでは?と思い、this.HandleRewardedAdLoadedなどとやってみましたがだめでした。
それではとクラス内で一度インスタンスを保持してから渡したのですがかわりませんでした。
広告はちゃんと読み込め、通常読み込めていれば行われるゲームのポーズや再開などもできています。Event周りだけが呼べません。
UnityAPIをHandleRewardedAdLoadedなどから直接呼んでもエラーが起こらないのでおそらくイベントの登録すらできていませんでした。
C#
1 public void RegisterAdmobEvent() { 2 RewardedAd rewardedAd = AdmobConfig.Instance.rewardedAd; 3 rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; 4 5 AdmobConfig.Instance.rewardedAd.OnAdFailedToLoad += this.HandleRewardBasedVideoFailedToLoad; 6 }
補足情報(FW/ツールのバージョンなど)
Admob 5.4.0
Unity 2020.3.11f
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。