Unity集成AdMob激励广告 观看完成后奖励玩家+1体力实现方法
Unity AdMob激励视频发放体力奖励实现方案
核心逻辑说明
实现逻辑分三块:补全广告回调、给体力系统加对外的加体力接口、打通两个模块的引用,不要在广告子线程直接改游戏数据,避免闪退。
1. 补全广告脚本的缺失逻辑
你现在的广告脚本只绑定了事件,没写回调实现,也没写按钮触发广告的方法,直接补全即可:
首先在广告脚本类里声明体力管理器的引用,后续用来调用加体力方法:
// 拖入挂了体力管理脚本的物体 public EnergyManager energyManager;
然后补全两个广告事件的回调,以及按钮点击方法:
// 激励视频完整播放完成的回调,只做奖励标记,不直接操作游戏数据 private void HandleRewardBasedVideoRewarded(object sender, Reward e) { isRewarded = true; } // 广告关闭回调,每次关广告都预加载下一条 private void HandleRewardBasedVideoClosed(object sender, EventArgs e) { RequestRewardBasedVideo(); } // 把这个方法绑到「看广告领体力」按钮的点击事件上 public void OnClickGetEnergyAd() { if (rewardBasedVideo.IsLoaded()) { rewardBasedVideo.Show(); } else { Debug.Log("广告加载中,请稍后再试"); } }
最后把你Update方法里空着的奖励发放逻辑补上:
void Update() { if (isRewarded) { isRewarded = false; // 看完广告发1点体力 energyManager.AddEnergy(1); } }
小提醒:你原来的广告脚本最后缺了类的收尾大括号,补代码的时候注意括号匹配。
2. 给体力管理脚本增加加体力的公共方法
直接在你现有的体力脚本里加下面的方法,广告奖励、活动道具发体力都可以复用这个方法,自动处理上限、计时器、数据存储逻辑:
/// <summary> /// 增加体力 /// </summary> /// <param name="addNum">增加的体力数量</param> public void AddEnergy(int addNum) { // 计算加完的体力值,最多不超过上限 currentEnergy = Mathf.Clamp(currentEnergy + addNum, 0, maxEnergy); if (currentEnergy >= maxEnergy) { // 体力满了就停止恢复计时 isRestoring = false; timerText.text = "Full"; } else { // 如果之前没在恢复计时,启动恢复协程 if (!isRestoring) { StartCoroutine(RestoreEnergy()); } } // 刷新UI、存本地数据 UpdateEnergy(); UpdateEnergyTimer(); Save(); }
小提醒:你原来UseEnergy方法里的日志拼写有误,Isufficient Energy!!正确拼写是Insufficient Energy!!,不影响功能,看不顺眼可以改。
3. 编辑器配置步骤
- 回到Unity编辑器,选中挂广告脚本的物体,把场景里挂了体力管理脚本的对象拖到
energyManager字段上 - 选中你做的领体力按钮,在OnClick事件列表里添加广告脚本的
OnClickGetEnergyAd方法 - 测试的时候记得用AdMob官方测试广告位ID,不要用正式ID测试,否则容易被封广告账号
避坑提示:不要在
OnAdRewarded回调里直接修改体力数据、操作UI,AdMob的回调不在Unity主线程,直接操作很容易出现偶发闪退、UI不刷新的问题,用isRewarded标记在Update主线程里处理奖励是最稳定的写法。
内容的提问来源于stack exchange,提问作者Clincă Florentin
相关产品推荐
相关产品推荐

