Прежде всего:
Кажется очень неразумным / нелогичным вызывать метод RequestInterstial
в вашем событии. Потому что тем самым вы создаете несколько подписок на одни и те же события, на которые вы уже подписаны! Это может привести к очень нежелательному / нежелательному поведению, а также к Stackoverflow exceptions
Мне неясно, почему вы даже позвоните RequestInterstial
, когда событие произойдет. Мне кажется, что вы хотели бы загрузить новое видео после того, как было показано первое. Измените метод, чтобы не добавлять события подписки.
Переместите события подписки и код инициализации в метод Start или Awake.
Также вы не запрашиваете инерциальное, а видео на основе вознаграждения. Я бы предложил переименовать, чтобы сохранить код логичным.
Public static RewardedScriptRow Instance;
void Start()
{
Instance = this;
DontDestroyOnLoad(this);
RequestRewardBasedVideo();
// Get singleton reward based video ad reference.
this.rewardBasedVideo = RewardBasedVideoAd.Instance;
rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoClosed;
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
}
private void RequestRewardBasedVideo()
{
#if UNITY_ANDROID
string appId = "ca-app-pub-3940256099942544~3347511713";
#elif UNITY_IPHONE
string appId = "ca-app-pub-3940256099942544~1458002511";
#else
string appId = "unexpected_platform";
#endif
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded video ad with the request.
this.rewardBasedVideo.LoadAd(request, adUnitId);
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
GetComponent<AudioSource>().PlayOneShot(GiftSound, 1.0F);
RequestRewardBasedVideo();
}
Кроме этого, оно должно работать. Если вы все еще не получаете желаемый результат, попробуйте установить точки останова во время отладки и / или использовать Debug.Log()
внутри подписанных методов, чтобы увидеть, что происходит.
Редактировать : Кроме того, если это происходит из-за перезагрузки сцен, вы можете попробовать добавить DontDestroyOnLoad(this);
, чтобы предотвратить уничтожение "AdObject". Я бы предложил создать этот сценарий в самой первой сцене и удалить его из всех остальных (чтобы избежать дублирования).
Затем вы можете даже применить шаблон singleton , чтобы вы могли легко получить доступ к сценарию из других классов.
Пример: * * тысяча двадцать-пять
StartCoroutine(RewardedScriptRow.Instance.LaunchAd());