首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity广告根本不显示,并收到错误'Implement IUnityAdsListener and call Advertisement.AddListener()‘

Unity广告根本不显示,并收到错误'Implement IUnityAdsListener and call Advertisement.AddListener()‘
EN

Stack Overflow用户
提问于 2020-10-08 13:40:44
回答 1查看 130关注 0票数 1

我在unity中创建了一个非常小的游戏,除了广告的展示之外,一切都做得很好。此外,我没有得到错误,只是一个小警告‘实现IUnityAdsListener并调用Advertisement.AddListener()’。我统一通过了所有的论坛,但它仍然不能在新方法中工作。请帮帮忙。

我的代码:

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-09 17:18:59

首先,您需要将名称空间IUnityAdsListener添加到类中。

代码语言:javascript
复制
public class App_Initialize: MonoBehaviour, IUnityAdsListener {}

接下来,在你的启动函数中添加一个列表器,并用你的gameId和一个布尔testMode初始化Unity Ads。

代码语言:javascript
复制
    void Start()
    {
        Advertisement.AddListener(this);
        Advertisement.Initialize(gameId, testMode);
    }

您将收到一个警告,提示您尚未为IUnityAdsListener实现正确的接口,因此请将这些接口添加到您的脚本中。

代码语言:javascript
复制
    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
    }

最后,在销毁脚本所在的GameObject或场景时移除侦听器,以避免错误。

代码语言:javascript
复制
private void OnApplicationQuit()
{
    Advertisement.RemoveListener(this);
}
private void OnDestroy()
{
    Advertisement.RemoveListener(this);
}

所以这应该是你的最终结果:

代码语言:javascript
复制
    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
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64256434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档