我应该在哪里添加插页式广告?
Where should I add the interstitial ad?
我设法测试了一个简单的应用程序,广告(横幅广告和插页式广告)按预期工作(测试广告,因为真实的广告没有,我不知道为什么)。
问题是我想将广告集成到我的主应用程序中。我为横幅做了这件事并且它有效但不知道如何处理插页式广告。对于测试应用程序,我在按下按钮时调用了一个函数,但在我的应用程序中,我不希望按下按钮以显示插页式广告,我希望每次玩家死亡时都会发生这种情况。而且我不知道该怎么做。
using System;
using UnityEngine;
using GoogleMobileAds.Api;
public class ads : MonoBehaviour
{
private BannerView bannerView;
private InterstitialAd interstitial;
private void RequestBanner()...
private void RequestInterstitial()
{
string adUnitId = "ca-app-pub-3940256099942544/1033173712";
this.interstitial = new InterstitialAd(adUnitId);
AdRequest request = new AdRequest.Builder().Build();
this.interstitial.LoadAd(request);
}
public void GameOverSoShowInterstitial()
{
if (this.interstitial.IsLoaded())
{
this.interstitial.Show();
}
}
void Start()
{
MobileAds.Initialize(initStatus => { });
this.RequestBanner();
this.RequestInterstitial();
}
}
^这是我的广告脚本
但是位于second scene named Menu, but since the interstitial should appear when the player dies, I should move that GameObject in the other scene that is the actual game,因为不可能死在'menu'段。而且,为了检查广告何时出现,我应该使用 GameManager,对吗?也是在游戏场景中。
public void GameOver()
{
gameOver = true;
gameScore = score.GetComponent<Score>().getScore();
score.SetActive(false);
Invoke("ActivateGameOverCanvas", 1);
pauseBtn.SetActive(false);
}
^这是 gamemanager 的 gameover 部分,所以我想在这里我应该以某种方式介绍一个可以生成插页式广告的指令,但我不知道。我也尝试将 'ads' 脚本添加到 gamemanager,因此在 gamemanager 的 GameOver 函数执行结束时从广告调用 GameOverSoShowInterstitial,但它没有用。
有什么想法吗? :(
1.使用另一个场景中的对象
当谈到从一个场景到另一个场景使用 scripts/objects 时,我们通常将该对象放入 MonoBehaviour
内置方法 DontDestroyOnLoad(object);
。通过使用这种方法,我们可以确保 object
不会在您更改场景时被销毁。假设您的脚本在 Menu Scene 中,您可以将该对象放入 DontDestroyOnLoad() 方法中,并且它不会在整个游戏过程中被销毁。
2。使用添加脚本中的方法
对此我们有多种选择。就像您可以使用 GameObject.FindObjectOfType()
或 GameObject.FindGameObjectWithTag()
等找到对象一样。但是使用 Gameobject.FindXXX() 方法在性能方面可能很繁重。 battre 方法是使用单例模式。在这里,您基本上在游戏开始时创建一个对象(当您需要该对象时)。并且不会有其他相同类型的对象(这意味着不会有其他具有相同脚本的对象附加到该对象).
3。请参阅 Action 中的两点
您的广告脚本
您无需更改任何内容,只需添加单例模式即可。
using System;
using UnityEngine;
using GoogleMobileAds.Api;
public class ads : MonoBehaviour
{
//This is a static instance of this class so that you can access it from anywhere from you game, Without creating any creating a new Object.(Point #2)
public static ads instance {
get; //These are the getter and setter methods of native C# find the reference below
private set;
}
private Awake()
{
//Check if the instance is already assigned(if there is already an object with this same script attached)
if(instance == null)
{
instance = this; //If instance is empty the assign this object to the instance
DoNotDestroyOnLoad(this.gameObject); //This line will stop Unity from destroying the object when you load new scene.(Point #1)
}
else
{
Destroy(this.gameObject); //since there is already an object of with script destroy this object so that there will be no conflicts between multiple instances of the same class.
}
}
void Start()
{
MobileAds.Initialize(initStatus => { });
this.RequestBanner();
this.RequestInterstitial();
}
public void ShowInterstitialAd()
{
... Show your Ad
}
}
游戏管理器脚本
public void PlayerDie() //assuming that you have a method for when your Player dies
{
...
ads.instance.ShowInterstitialAd(); //Call the ShowInterstitialAd() method because the object will not be destroyed when you load another scene.
}
我基本上完成了。我希望这可以帮助你。这里有一些参考可能有助于进一步理解这一点。
我设法测试了一个简单的应用程序,广告(横幅广告和插页式广告)按预期工作(测试广告,因为真实的广告没有,我不知道为什么)。
问题是我想将广告集成到我的主应用程序中。我为横幅做了这件事并且它有效但不知道如何处理插页式广告。对于测试应用程序,我在按下按钮时调用了一个函数,但在我的应用程序中,我不希望按下按钮以显示插页式广告,我希望每次玩家死亡时都会发生这种情况。而且我不知道该怎么做。
using System;
using UnityEngine;
using GoogleMobileAds.Api;
public class ads : MonoBehaviour
{
private BannerView bannerView;
private InterstitialAd interstitial;
private void RequestBanner()...
private void RequestInterstitial()
{
string adUnitId = "ca-app-pub-3940256099942544/1033173712";
this.interstitial = new InterstitialAd(adUnitId);
AdRequest request = new AdRequest.Builder().Build();
this.interstitial.LoadAd(request);
}
public void GameOverSoShowInterstitial()
{
if (this.interstitial.IsLoaded())
{
this.interstitial.Show();
}
}
void Start()
{
MobileAds.Initialize(initStatus => { });
this.RequestBanner();
this.RequestInterstitial();
}
}
^这是我的广告脚本 但是位于second scene named Menu, but since the interstitial should appear when the player dies, I should move that GameObject in the other scene that is the actual game,因为不可能死在'menu'段。而且,为了检查广告何时出现,我应该使用 GameManager,对吗?也是在游戏场景中。
public void GameOver()
{
gameOver = true;
gameScore = score.GetComponent<Score>().getScore();
score.SetActive(false);
Invoke("ActivateGameOverCanvas", 1);
pauseBtn.SetActive(false);
}
^这是 gamemanager 的 gameover 部分,所以我想在这里我应该以某种方式介绍一个可以生成插页式广告的指令,但我不知道。我也尝试将 'ads' 脚本添加到 gamemanager,因此在 gamemanager 的 GameOver 函数执行结束时从广告调用 GameOverSoShowInterstitial,但它没有用。
有什么想法吗? :(
1.使用另一个场景中的对象
当谈到从一个场景到另一个场景使用 scripts/objects 时,我们通常将该对象放入 MonoBehaviour
内置方法 DontDestroyOnLoad(object);
。通过使用这种方法,我们可以确保 object
不会在您更改场景时被销毁。假设您的脚本在 Menu Scene 中,您可以将该对象放入 DontDestroyOnLoad() 方法中,并且它不会在整个游戏过程中被销毁。
2。使用添加脚本中的方法
对此我们有多种选择。就像您可以使用 GameObject.FindObjectOfType()
或 GameObject.FindGameObjectWithTag()
等找到对象一样。但是使用 Gameobject.FindXXX() 方法在性能方面可能很繁重。 battre 方法是使用单例模式。在这里,您基本上在游戏开始时创建一个对象(当您需要该对象时)。并且不会有其他相同类型的对象(这意味着不会有其他具有相同脚本的对象附加到该对象).
3。请参阅 Action 中的两点 您的广告脚本 您无需更改任何内容,只需添加单例模式即可。
using System;
using UnityEngine;
using GoogleMobileAds.Api;
public class ads : MonoBehaviour
{
//This is a static instance of this class so that you can access it from anywhere from you game, Without creating any creating a new Object.(Point #2)
public static ads instance {
get; //These are the getter and setter methods of native C# find the reference below
private set;
}
private Awake()
{
//Check if the instance is already assigned(if there is already an object with this same script attached)
if(instance == null)
{
instance = this; //If instance is empty the assign this object to the instance
DoNotDestroyOnLoad(this.gameObject); //This line will stop Unity from destroying the object when you load new scene.(Point #1)
}
else
{
Destroy(this.gameObject); //since there is already an object of with script destroy this object so that there will be no conflicts between multiple instances of the same class.
}
}
void Start()
{
MobileAds.Initialize(initStatus => { });
this.RequestBanner();
this.RequestInterstitial();
}
public void ShowInterstitialAd()
{
... Show your Ad
}
}
游戏管理器脚本
public void PlayerDie() //assuming that you have a method for when your Player dies
{
...
ads.instance.ShowInterstitialAd(); //Call the ShowInterstitialAd() method because the object will not be destroyed when you load another scene.
}
我基本上完成了。我希望这可以帮助你。这里有一些参考可能有助于进一步理解这一点。