###実現したいこと
Unityで開発中のAndroidアプリで、GoogleAdmobのリワード広告を実装したい
###詳細
UnityでAndroidのゲームを作っています。
キャラクターの体力が0になった時にリワード広告の視聴をユーザーに問い、視聴した場合体力を50%回復、視聴しなかった或いは視聴を途中で辞めた場合体力は回復せずゲームオーバーになる、という機能を実装したいと考えています。
上記について、理解が足りておらず以下の問題を抱えております。もしお力をお貸しくださる方がいらっしゃいましたら、アドバイス等いただけますと大変幸いです。
###問題点
(1)HandleRewardBasedVideoRewardedメソッドが呼ばれるタイミングが分からない
→広告動画を最後まで見た上で右上の×ボタンをタップしても、リワードが与えられない(体力を50%回復するメソッドが呼ばれない)
(2)ユーザーが動画の視聴を途中で見るのを辞めた際に呼ばれる処理をどこに書けばいいか分からない
→HandleRewardBasedVideoClosedメソッドに書けばいいのかと思ったが、違った
(3)広告動画の再生時間を任意に選びたいが、方法が分からない
→5秒版、30秒版、60秒版とあると思いますが、表示する動画の長さを設定したい
###該当のソースコード
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using GoogleMobileAds.Api; 5using System; 6using StrOpe = StringOperationUtil.OptimizedStringOperation; 7using UniRx; 8using UniRx.Triggers; 9 10public class AdManagement : MonoBehaviour { 11 12 private RewardBasedVideoAd rewardBasedVideo; 13 // 呼びたいメソッドを持つクラス 14 public PlayerHealth playerHealth; 15 16 void Start () 17 { 18 this.rewardBasedVideo = RewardBasedVideoAd.Instance; 19 RequestRewardBasedVideo (); 20 RegistHandler (); 21 22 // 追記 23 this.UpdateAsObservable() 24 .Where(_ => endPlay) 25 .ObserveOnMainThread() 26 .Subscribe(_ => playerHealth.Revival()); 27 } 28 29 private void RequestRewardBasedVideo() 30 { 31 #if UNITY_ANDROID 32 // テストアカウント 33 string adUnitId = "ca-app-pub-3940256099942544/5224354917"; 34 #else 35 string adUnitId = "unexpected_platform"; 36 #endif 37 38 AdRequest request = new AdRequest.Builder().Build(); 39 rewardBasedVideo.LoadAd(request, adUnitId); 40 } 41 42 private void RegistHandler() 43 { 44 // Ad event fired when the rewarded video ad 45 46 // has been received. 47 rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded; 48 // has failed to load. 49 rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad; 50 // is opened. 51 rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened; 52 // has started playing. 53 rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted; 54 // has rewarded the user. 55 rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded; 56 // is closed. 57 rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed; 58 // is leaving the application. 59 rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication; 60 } 61 62 #region RewardBasedVideo callback handlers 63 64 private void HandleRewardBasedVideoLoaded (object sender, EventArgs args) 65 { 66 MonoBehaviour.print ("HandleRewardBasedVideoLoaded event received"); 67 } 68 69 private void HandleRewardBasedVideoFailedToLoad (object sender, AdFailedToLoadEventArgs args) 70 { 71 MonoBehaviour.print ( 72 StrOpe.i + "HandleRewardBasedVideoFailedToLoad event received with message: " + args.Message); 73 } 74 75 private void HandleRewardBasedVideoOpened (object sender, EventArgs args) 76 { 77 MonoBehaviour.print ("HandleRewardBasedVideoOpened event received"); 78 } 79 80 private void HandleRewardBasedVideoStarted (object sender, EventArgs args) 81 { 82 MonoBehaviour.print ("HandleRewardBasedVideoStarted event received"); 83 } 84 85 // 広告動画が完全に視聴された際に呼び出されるメソッドと理解。キャラクターの体力を50%回復させたい 86 private void HandleRewardBasedVideoRewarded (object sender, Reward args) 87 { 88 // 追記 89 endPlay = true; 90 91 string type = args.Type; 92 double amount = args.Amount; 93 MonoBehaviour.print ( 94 StrOpe.i + "HandleRewardBasedVideoRewarded event received for " + amount.ToString () + " " + type); 95 } 96 97 public void HandleRewardBasedVideoClosed (object sender, EventArgs args) 98 { 99 // 追記→コメントアウト 100 // playerHealth.Death(); 101 MonoBehaviour.print ("HandleRewardBasedVideoClosed event received"); 102 } 103 104 private void HandleRewardBasedVideoLeftApplication (object sender, EventArgs args) 105 { 106 MonoBehaviour.print ("HandleRewardBasedVideoLeftApplication event received"); 107 } 108 #endregion 109 110 // キャラクターの体力が0になった時に、広告を見るか否かユーザーに問い、見る選択をした際に呼び出す 111 public void PlayAd () 112 { 113 if (rewardBasedVideo.IsLoaded()) { 114 rewardBasedVideo.Show(); 115 } 116 } 117 118} 119
###参考にしたエントリ
https://stackoverflow.com/questions/37354039/how-to-check-if-an-advertisement-has-finished-in-unity

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/23 08:39 編集
2018/01/23 08:23
2018/01/23 09:42
2018/01/23 09:52
2018/01/23 10:21
2018/01/23 10:57