Unity3d 联合广告陷入循环

Unity3d 联合广告陷入循环,unity3d,Unity3d,我在unity游戏中设置了一个测试广告。游戏结束后,我从GameManager脚本调用IntAd函数。但问题是,当我点击广告中的关闭按钮时,广告会一次又一次地出现。请帮助我如何在显示广告后停止IntAd功能 public class AdsManager : MonoBehaviour { public static AdsManager instance; private string playStoreID = "000000"; privat

我在unity游戏中设置了一个测试广告。游戏结束后,我从GameManager脚本调用IntAd函数。但问题是,当我点击广告中的关闭按钮时,广告会一次又一次地出现。请帮助我如何在显示广告后停止IntAd功能

public class AdsManager : MonoBehaviour
{
    public static AdsManager instance;

    private string playStoreID = "000000";

    private string intAd = "video";
    private string rewardedAd = "rewardedVideo";
    private string bannerAd = "bannerAd";

    public bool isTargrtPlayStore;
    public bool isTestAd;

    public static int start;

    void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(this.gameObject);
        }
    }

    private void Start()
    {
        InitializeAdvertisement();
    }

    private void InitializeAdvertisement()
    {
        if (isTargrtPlayStore)
        {
            Advertisement.Initialize(playStoreID, isTestAd);
            return;

        }
    }

    public void IntAd()
    {
        if (Advertisement.IsReady(intAd))
        {
            Advertisement.Show(intAd);
        }
        
    }
}
下面是GameManager脚本-

public class GameManager : MonoBehaviour
{

    public static GameManager instance;
    public bool gameOver;

    void Awake()
    {
        if (instance == null){
            instance = this;
        }
    }

    // Start is called before the first frame update
    void Start()
    {
        gameOver = false;
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void StartGame()
    {
        UiManager.instance.GameStart();
        UiManager.instance.StartScore1();
        ScoreManager.instance.startScore();
        GameObject.Find("PlatformSpawner").GetComponent<PlatformSpawner>().StartSpawningPlatforms();
        //AdsManager.instance.BannerAd();
    }

    public void GameOver()
    {
        
        UiManager.instance.GameOver();
        
        ScoreManager.instance.stopScore();
        gameOver = true;
        AdsManager.instance.IntAd();
    }
}
公共类游戏管理器:单一行为
{
公共静态GameManager实例;
公共场所;
无效唤醒()
{
if(实例==null){
实例=此;
}
}
//在第一帧更新之前调用Start
void Start()
{
gameOver=false;
}
//每帧调用一次更新
无效更新()
{
}
公共无效StartName()
{
UiManager.instance.GameStart();
UiManager.instance.StartScore1();
ScoreManager.instance.startScore();
GameObject.Find(“PlatformSpawner”).GetComponent().StartSpawningPlatforms();
//AdsManager.instance.BannerAd();
}
公众假期
{
UiManager.instance.GameOver();
ScoreManager.instance.stopScore();
gameOver=true;
AdsManager.instance.IntAd();
}
}
调用GameOver函数的代码

void Update()
    {
        if (!started)
        {
            if (Input.GetMouseButtonDown(0))
            {
                rb.velocity = new Vector3(speed, 0, 0);
                started = true;
                GameManager.instance.StartGame();
            }
        }

        if (!Physics.Raycast(transform.position, Vector3.down, 1f))
        {
            gameOver = true;
            rb.velocity = new Vector3(0, -25f, 0);

            Camera.main.GetComponent<CameraFollow>().gameOver = true;
            
            GameManager.instance.GameOver();
            

        }
void Update()
{
如果(!已启动)
{
if(Input.GetMouseButtonDown(0))
{
rb.velocity=新矢量3(速度,0,0);
开始=真;
GameManager.instance.StartGame();
}
}
if(!physical.Raycast(transform.position,Vector3.down,1f))
{
gameOver=true;
rb.velocity=新矢量3(0,-25f,0);
Camera.main.GetComponent().gameOver=true;
GameManager.instance.GameOver();
}

只需对名为GameEnd的bool执行if语句。将其设置为false。仅当GameEnd为false时播放广告。在广告实例化后,将GameEnd设置为true

    if (!Physics.Raycast(transform.position, Vector3.down, 1f))
    {
        bool GameEnd = false;
        gameOver = true;
        rb.velocity = new Vector3(0, -25f, 0);

        Camera.main.GetComponent<CameraFollow>().gameOver = true;
    
        if(! GameEnd)
        {
           GameManager.instance.GameOver();
           GameEnd = true;
        }

    }
if(!Physics.Raycast(transform.position,Vector3.down,1f))
{
bool GameEnd=false;
gameOver=true;
rb.velocity=新矢量3(0,-25f,0);
Camera.main.GetComponent().gameOver=true;
如果(!GameEnd)
{
GameManager.instance.GameOver();
GameEnd=true;
}
}

您调用的代码
GameManager.GameOver()
Update()
中,因此它会在每一帧中被调用,如果
!physical.Raycast(transform.position,Vector3.down,1f)
在游戏结束时总是正确的(而不仅仅是正确的一次),那么它最终会调用
GameManager.GameOver()
与您看到的行为一致的每一帧

您可以通过将
!gameOver
添加到if语句中来解决此问题,这样它只会在游戏结束时进入if语句一次,然后在游戏开始时您可以将
gameOver
翻回false

        if (!Physics.Raycast(transform.position, Vector3.down, 1f) && !gameOver)
        {
            gameOver = true;
            rb.velocity = new Vector3(0, -25f, 0);

            Camera.main.GetComponent<CameraFollow>().gameOver = true;
            
            GameManager.instance.GameOver();
        }
if(!Physics.Raycast(transform.position,Vector3.down,1f)&!gameOver)
{
gameOver=true;
rb.velocity=新矢量3(0,-25f,0);
Camera.main.GetComponent().gameOver=true;
GameManager.instance.GameOver();
}

如果您没有看到GameManager中的代码,就无法回答您的问题。添加了@GarrisonBecker GameManager脚本。您可以提供调用
GameManager.GameOver()的代码吗
method?添加到问题中如果问题没有准确回答所需的足够信息,在提供信息之前不要发布答案。GameManager脚本已添加完毕请立即尝试。感谢添加脚本