2016-04-28 5 views
1

Когда вы приостанавливаете игру, есть кнопка, в которой вы можете щелкнуть и просмотреть видео с возможностью пропуска в конце этого видео. Я хочу реализовать следующее:Показать Результат Unity ADS награды

Если видеоролик проходит до конца, они получают 1 дополнительное сердце (максимум 3 полных сердца) и получают окно чата или диалог оповещения.

Если видео не открывается, полностью загружается или что-то не так, они ничего не получают, появляется диалоговое окно чата или предупреждение.

В настоящее время видео загружается, но когда видео заканчивается, выигрыш не получен (1 лишнее сердце), что не так в моем коде?

Ниже кнопка объявление

using UnityEngine; 
using System.Collections; 
using UnityEngine.Advertisements; 
using UnityEngine.UI; 

public class Ads : MonoBehaviour { 

    public Button getAds; 
    private Hearts heart; 

    void OnEnable() 
    { 
     getAds.onClick.AddListener (() => GetAds (getAds)); 
    } 


    private void GetAds (Button buttonPressed) 
    { 
     if (buttonPressed == getAds) { 

      Advertisement.Initialize ("XXXXXX", true); 
      Advertisement.IsReady ("rewardedVideo"); 
      Advertisement.Show ("rewardedVideo"); 
      } 
    } 

    public void HandleShowResult (ShowResult result) 
    { 
     switch (result) 
     { 
     case ShowResult.Finished: 
      heart = GameObject.FindGameObjectWithTag ("Hearts").GetComponent<Hearts>() as Hearts; 
      heart.AddHeart(); 
      break; 

     case ShowResult.Skipped: 
      Debug.Log("The ad was skipped before reaching the end."); 
      break; 

     case ShowResult.Failed: 
      Debug.LogError("The ad failed to be shown."); 
      break; 
     } 
    } 


    void OnDisable() 
    { 
     getAds.onClick.RemoveAllListeners(); 
    } 
} 

Ниже текущей система сердца сценария

using UnityEngine; 
using System.Collections; 

public class Hearts : MonoBehaviour { 

    public Texture2D[]initialHeart; 
    private int hearts; 
    private int currentHearts; 

    void Start() { 

     GetComponent<GUITexture>().texture = initialHeart[0]; 
     hearts = initialHeart.Length; 

    } 

    void Update() { 

    } 

    public bool TakeHeart() 
    { 
     if (hearts < 0) { 

      return false; 

     } 

     if (currentHearts < (hearts - 1)) { 

      currentHearts += 1; 
      GetComponent<GUITexture>().texture = initialHeart [currentHearts]; 
      return true; 


     } else { 

      return false; 

     } 
    } 

    public bool AddHeart() { 

     if (currentHearts > 0) { 
      currentHearts -= 1; 
      GetComponent<GUITexture>().texture = initialHeart [currentHearts]; 
      return true; 
     } else { 
      return false; 

     } 
    } 
} 
+0

+1 для ввода кода. Вам нужно изменить свой вопрос и перефразировать свой вопрос. Прямо сейчас я смутился, читая его. Также вопрос заканчивается на «?» «Что случилось с моим кодом?» «Почему мое объявление не появляется?» ... – Programmer

ответ

1

Ваш код отсутствует наиболее важная часть, которая

ShowOptions options = new ShowOptions(); 
options.resultCallback = HandleShowResult; 
Advertisement.Show(zoneId, options); 

Без него, HandleShowResult привычки и вы не узнаете, что произошло после того, как объявление было отображено. Также оценка не будет увеличиваться. Я пошел на реализацию coroutine, который следит за тем, чтобы все было хорошо, прежде чем показывать рекламу. Это не было протестировано, но любая проблема может быть легко устранена. Ошибки отображаются красным цветом. Зеленый означает успех.

public class Ads : MonoBehaviour 
{ 

    public string gameId; 
    public string zoneId; 

    public Button getAds; 

    private Hearts heart; 

    void OnEnable() 
    { 
     getAds.onClick.AddListener(() => GetAds(getAds)); 
    } 


    private void GetAds(Button buttonPressed) 
    { 
     if (buttonPressed == getAds) 
     { 
      //Wait for ad to show. The timeout time is 3 seconds 
      StartCoroutine(showAdsWithTimeOut(3)); 
     } 
    } 


    public void HandleShowResult(ShowResult result) 
    { 
     switch (result) 
     { 
      case ShowResult.Finished: 
       heart = GameObject.FindGameObjectWithTag("Hearts").GetComponent<Hearts>() as Hearts; 
       heart.AddHeart(); 
       Debug.Log("<color=green>The ad was skipped before reaching the end.</color>"); 
       break; 

      case ShowResult.Skipped: 
       Debug.Log("<color=yellow>The ad was skipped before reaching the end.</color>"); 
       break; 

      case ShowResult.Failed: 
       Debug.LogError("<color=red>The ad failed to be shown.</color>"); 
       break; 
     } 
    } 

    IEnumerator showAdsWithTimeOut(float timeOut) 
    { 
     //Check if ad is supported on this platform 
     if (!Advertisement.isSupported) 
     { 
      Debug.LogError("<color=red>Ad is NOT supported</color>"); 
      yield break; //Exit coroutine function because ad is not supported 
     } 

     Debug.Log("<color=green>Ad is supported</color>"); 

     //Initialize ad if it has not been initialized 
     if (!Advertisement.isInitialized) 
     { 
      //Initialize ad 
      Advertisement.Initialize(gameId, true); 
     } 


     float counter = 0; 
     bool adIsReady = false; 

     // Wait for timeOut seconds until ad is ready 
     while(counter<timeOut){ 
      counter += Time.deltaTime; 
      if(Advertisement.IsReady (zoneId)){ 
       adIsReady = true; 
       break; //Ad is //Ad is ready, Break while loop and continue program 
      } 
      yield return null; 
     } 

     //Check if ad is not ready after waiting 
     if(!adIsReady){ 
      Debug.LogError("<color=red>Ad failed to be ready in " + timeOut + " seconds. Exited function</color>"); 
      yield break; //Exit coroutine function because ad is not ready 
     } 

     Debug.Log("<color=green>Ad is ready</color>"); 

     //Check if zoneID is empty or null 
     if (string.IsNullOrEmpty(zoneId)) 
     { 
      Debug.Log("<color=red>zoneId is null or empty. Exited function</color>"); 
      yield break; //Exit coroutine function because zoneId null 
     } 

     Debug.Log("<color=green>ZoneId is OK</color>"); 


     //Everything Looks fine. Finally show ad (Missing this part in your code) 
     ShowOptions options = new ShowOptions(); 
     options.resultCallback = HandleShowResult; 

     Advertisement.Show(zoneId, options); 
    } 

    void OnDisable() 
    { 
     getAds.onClick.RemoveAllListeners(); 
    } 
} 
+0

Запуск, ультра мега-бластер, 101% ... Я добавил только, gameid = "XXXXXXX" и zondeId = "награжденные видео" строки ... Спасибо + 1 раз за вашу помощь и терпение. –

+0

@AlanVieiraRezende Добро пожаловать. Я также ответил на ваш другой вопрос. Поэтому проверьте это .http: //stackoverflow.com/questions/36875918/save-sound-value-playerprefers – Programmer

+0

ok дайте мне пройти тест! скоро вернусь ... –