Объявления Unity не отображаются вообще и выдается ошибка ‘Внедрить IUnityAdsListener и вызвать Advertisement . addListener .addListener()»

#c# #unity3d

#c# #unity3d

Вопрос:

Я создал очень маленькую игру в Unity, и все идет нормально, кроме показа рекламы. Кроме того, я не получаю ошибку, просто небольшое предупреждение ‘Внедрить IUnityAdsListener и вызвать Advertisement .addListener()». Я просмотрел все форумы в Unity, и все равно он не работает в новом методе. Пожалуйста, помогите.

Мой код:

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

public class App_Initialize : MonoBehaviour
{
    public GameObject inMenuUI;
    public GameObject inGameUI;
    public GameObject gameoverUI;
    public GameObject adButton;
    public GameObject restartButton;
    public GameObject player;
    public bool hasGameStarted = false;
    private bool hasSeenRewardedAd = false;

    void Awake()
    {
        Shader.SetGlobalFloat("_Curvature", 2.0f);
        Shader.SetGlobalFloat("_Trimming", 0.1f);
        Application.targetFrameRate = 60;
    }
    // Start is called before the first frame update
    void Start()
    {
        player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
        inMenuUI.gameObject.SetActive(true);
        inGameUI.gameObject.SetActive(false);
        gameoverUI.gameObject.SetActive(false);
    }

    public void PlayButton()
    {   
        if(hasGameStarted == true)
        {
            StartCoroutine(StartGame(1.0f));

        }
        else
        {
            StartCoroutine(StartGame(0.0f));
        }
    }

    public void PauseGame()
    {
        player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
        hasGameStarted = true;
        inMenuUI.gameObject.SetActive(true);
        inGameUI.gameObject.SetActive(false);
        gameoverUI.gameObject.SetActive(false);
    }

    public void GameOver()
    {
        player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition;
        hasGameStarted = true;
        inMenuUI.gameObject.SetActive(false);
        inGameUI.gameObject.SetActive(false);
        gameoverUI.gameObject.SetActive(true);
        if(hasSeenRewardedAd == true)
        {
            adButton.GetComponent<Image>().color = new Color(1, 1, 1, 0.5f);
            adButton.GetComponent<Button>().enabled = false;
            adButton.GetComponent<Animator>().enabled = false;
            restartButton.GetComponent<Animator>().enabled = true;
        }
    }

    public void RestartGame()
    {
        SceneManager.LoadScene(0);
    }

    public void ShowAd()
    {
        if (Advertisement.IsReady("rewardedVideo"))
        {
            var options = new ShowOptions { resultCallback = HandleShowResult };
            Advertisement.Show("rewardedVideo", options);
        }

    }
    private void HandleShowResult(ShowResult result)
    {
        switch (result)
        {
            case ShowResult.Finished:
                Debug.Log("The ad was successfully shown");
                hasSeenRewardedAd = true;
                StartCoroutine(StartGame(1.5f));
                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;
        }
    }

    IEnumerator StartGame(float waitTime)
    {
        inMenuUI.gameObject.SetActive(false);
        inGameUI.gameObject.SetActive(true);
        gameoverUI.gameObject.SetActive(false);
        yield return new WaitForSeconds(waitTime);
        player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.None;
        player.GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionY;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
            Application.Quit();
    }
}
  

Комментарии:

1. Руководство: docs.unity3d.com/Packages/com.unity.ads@3.4/manual /…

Ответ №1:

Сначала вам нужно добавить пространство имен IUnityAdsListener в ваш класс.

 public class App_Initialize: MonoBehaviour, IUnityAdsListener {}
  

Затем добавьте список в свою функцию запуска и инициализируйте объявления Unity с помощью вашего GameID и bool TestMode .

     void Start()
    {
        Advertisement.AddListener(this);
        Advertisement.Initialize(gameId, testMode);
    }
  

Вы получите предупреждение о том, что вы еще не внедрили правильные интерфейсы для IUnityAdsListener, поэтому добавьте их в свой скрипт.

     public void OnUnityAdsDidError(string message)
    {
        //YOUR CODE
    }

    public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
    {
        //YOUR CODE
    }

    public void OnUnityAdsDidStart(string placementId)
    {
        //YOUR CODE
    }

    public void OnUnityAdsReady(string placementId)
    {
        //YOUR CODE
    }
  

Наконец, удалите прослушиватель, когда вы уничтожаете игровой объект или сцену, в которой находится ваш скрипт, чтобы избежать ошибок.

 private void OnApplicationQuit()
{
    Advertisement.RemoveListener(this);
}
private void OnDestroy()
{
    Advertisement.RemoveListener(this);
}
  

Так что это должен быть ваш конечный результат:

     using UnityEngine;
    using UnityEngine.Advertisements;

    public class App_Initialize : MonoBehaviour, IUnityAdsListener
    {
        public string gameId = "YOUR_GAME_ID";
        public string myPlacementId = "YOUR_PLACEMENT_ID";
        public bool testMode = true;


        void Start()
        {
            Advertisement.AddListener(this);
            Advertisement.Initialize(gameId, testMode);
        }
        private void OnApplicationQuit()
        {
            Advertisement.RemoveListener(this);
        }
        private void OnDestroy()
        {
            Advertisement.RemoveListener(this);
        }
        public void OnUnityAdsDidError(string message)
        {
            //YOUR CODE
        }

        public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
        {
            //YOUR CODE
        }

        public void OnUnityAdsDidStart(string placementId)
        {
            //YOUR CODE
        }

        public void OnUnityAdsReady(string placementId)
        {
            //YOUR CODE
        }
    }