在Unity中,Singleton模式是一种常用的设计模式,用于确保某个类只有一个实例,并且提供一个全局访问点来获取该实例。
在使用AdMob奖励广告时,可以结合Singleton模式来实现对广告实例的管理和控制。下面是一个示例代码:
using UnityEngine;
using GoogleMobileAds.Api;
public class AdManager : MonoBehaviour
{
private static AdManager instance; // Singleton实例
private RewardBasedVideoAd rewardAd; // 奖励广告实例
public static AdManager Instance
{
get
{
if (instance == null)
{
instance = FindObjectOfType<AdManager>();
DontDestroyOnLoad(instance.gameObject);
}
return instance;
}
}
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
// 初始化奖励广告
MobileAds.Initialize(initStatus => { });
rewardAd = RewardBasedVideoAd.Instance;
rewardAd.OnAdRewarded += HandleReward;
}
public void LoadRewardAd(string adUnitId)
{
AdRequest request = new AdRequest.Builder().Build();
rewardAd.LoadAd(request, adUnitId);
}
public void ShowRewardAd()
{
if (rewardAd.IsLoaded())
{
rewardAd.Show();
}
else
{
Debug.Log("Reward ad is not ready yet.");
}
}
private void HandleReward(object sender, Reward args)
{
// 处理奖励
}
}
在上述代码中,AdManager类作为Singleton类,通过静态属性Instance来提供全局访问点。在Awake()方法中,如果instance为null,则将当前实例设为instance,并调用DontDestroyOnLoad()来确保场景切换时不被销毁。如果instance不为null,表示已经存在其他实例,则销毁当前实例。
Start()方法用于初始化奖励广告。在LoadRewardAd()方法中,根据提供的adUnitId加载奖励广告。ShowRewardAd()方法用于显示奖励广告,如果广告已加载完成,则调用Show()方法显示广告,否则输出日志信息。
HandleReward()方法用于处理奖励,可以根据实际需求来定义奖励逻辑。
这里推荐使用腾讯云的广告解决方案,具体是腾讯广告(GDT)的移动广告SDK,可用于在应用中显示各类广告形式。腾讯广告(GDT)支持Unity平台,并提供了相关的Unity插件和接入文档,使开发者能够方便地集成广告功能。
腾讯广告(GDT)的产品介绍和接入文档可以在腾讯云广告开放平台的官方网站上找到:腾讯广告官网。根据项目需求选择适合的广告形式,如激励视频广告、插屏广告等,并按照文档进行集成和配置。
注意:以上答案仅提供了一种实现方式,并推荐使用腾讯云的广告解决方案,具体产品选择和接入方式可以根据实际需求和项目情况进行调整。
领取专属 10元无门槛券
手把手带您无忧上云