Unity游戏项目接广告

Unity游戏项目中接入GoogleAdMob

先看效果图

接入测试横幅广告,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using System;public class GoogleAdMobManager : MonoBehaviour
{private static GoogleAdMobManager _instance;  public static GoogleAdMobManager Instance  {  get  {  if (_instance == null)  {  // 尝试在场景中找到GoogleAdMobManager实例  _instance = FindObjectOfType<GoogleAdMobManager>();  if (_instance == null)  {  Debug.LogError("GoogleAdMobManager instance not found in the scene!");  }  }  return _instance;  }  }  private void Awake()  {  // 确保不会创建GoogleAdMobManager的多个实例  if (_instance != null && _instance != this)  {  Destroy(gameObject);  return;  }  _instance = this;  DontDestroyOnLoad(gameObject); // 防止在加载新场景时销毁此对象(可选)  }  void Start(){MobileAds.Initialize((InitializationStatus initStatus) =>{CreateBannerView();  LoadAd();  ListenToAdEvents(); // LoadInterstitialAd();           });}// Update is called once per framevoid Update(){}#if UNITY_ANDROIDprivate string _adUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONEprivate string _adUnitId = "ca-app-pub-3940256099942544/2934735716";
#elseprivate string _adUnitId = "unused";
#endifBannerView _bannerView;/// <summary>/// Creates a 320x50 banner view at top of the screen./// </summary>public void CreateBannerView(){Debug.Log("Creating banner view");// If we already have a banner, destroy the old one.if (_bannerView != null){DestroyBannerView();}// Create a 320x50 banner at top of the screen_bannerView = new BannerView(_adUnitId, AdSize.Banner, AdPosition.Top);}public void LoadAd()
{// create an instance of a banner view first.if(_bannerView == null){CreateBannerView();}// create our request used to load the ad.var adRequest = new AdRequest();// send the request to load the ad.Debug.Log("Loading banner ad.");_bannerView.LoadAd(adRequest);
}private void ListenToAdEvents()
{// Raised when an ad is loaded into the banner view._bannerView.OnBannerAdLoaded += () =>{Debug.Log("Banner view loaded an ad with response : "+ _bannerView.GetResponseInfo());};// Raised when an ad fails to load into the banner view._bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>{Debug.LogError("Banner view failed to load an ad with error : "+ error);};// Raised when the ad is estimated to have earned money._bannerView.OnAdPaid += (AdValue adValue) =>{Debug.Log(String.Format("Banner view paid {0} {1}.",adValue.Value,adValue.CurrencyCode));};// Raised when an impression is recorded for an ad._bannerView.OnAdImpressionRecorded += () =>{Debug.Log("Banner view recorded an impression.");};// Raised when a click is recorded for an ad._bannerView.OnAdClicked += () =>{Debug.Log("Banner view was clicked.");};// Raised when an ad opened full screen content._bannerView.OnAdFullScreenContentOpened += () =>{Debug.Log("Banner view full screen content opened.");};// Raised when the ad closed full screen content._bannerView.OnAdFullScreenContentClosed += () =>{Debug.Log("Banner view full screen content closed.");};
}public void DestroyBannerView()
{if (_bannerView != null){Debug.Log("Destroying banner view.");_bannerView.Destroy();_bannerView = null;}
}}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using GoogleMobileAds.Api;public class GameMgr : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}public void OnPlayButtonClick(){           SceneManager.LoadScene("02-Play");     GoogleAdMobManager.Instance?.DestroyBannerView(); }public void JumpButtonClick(){           SceneManager.LoadScene("03-RewardAd");     }public void OnPauseButtonClick(){//暂停广告//展示广告LoadInterstitialAd();}private InterstitialAd _interstitialAd;  private  string _adUnitId = "ca-app-pub-3940256099942544/1033173712";public void LoadInterstitialAd(){if (_interstitialAd != null){_interstitialAd.Destroy();_interstitialAd = null;} Debug.Log("Loading the interstitial ad.");// InterstitialAd ad = new interstitialAd(_adUnitId);AdRequest adRequest = new AdRequest();InterstitialAd.Load(_adUnitId, adRequest,(InterstitialAd ad, LoadAdError error) =>{// if error is not null, the load request failed.if (error != null || ad == null){Debug.LogError("interstitial ad failed to load an ad " +"with error : " + error);return;}Debug.Log("Interstitial ad loaded with response : "+ ad.GetResponseInfo());_interstitialAd = ad;});ShowInterstitialAd();}public void ShowInterstitialAd()
{if (_interstitialAd != null && _interstitialAd.CanShowAd()){Debug.Log("Showing interstitial ad.");_interstitialAd.Show();}else{Debug.LogError("Interstitial ad is not ready yet.");}
}}

场景1,MainCamera上挂载上面两个脚本,GoogleAdMobManager .cs和 GameMgr.cs

创建StartButton按钮

场景2,加载插屏广告InterstitialAd,Main Camera上挂载Game Mgr.cs

创建Pause Game按钮,当暂停的时候,显示插屏广告,调用Game Mgr.cs中OnPauseButtonClick()方法

创建Jump to reward ad,点击跳转到激励广告。点击JumpButton触发GameMgr中JumpButtonClick()方法。

场景2,02-play中的Main Camera上的Audio Listener需去除,项目场景中只能有一个Audio Listener

场景3,加载激励广告

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using GoogleMobileAds.Api;
using System;public class RewardAd : MonoBehaviour
{#if UNITY_ANDROIDprivate string _adUnitId = "ca-app-pub-3940256099942544/5224354917";#elif UNITY_IPHONEprivate string _adUnitId = "ca-app-pub-3940256099942544/1712485313";#elseprivate string _adUnitId = "unused";#endifprivate RewardedAd _rewardedAd;void Start(){MobileAds.Initialize((InitializationStatus initStatus) =>{LoadRewardedAd();});}public void LoadRewardedAd(){// Clean up the old ad before loading a new one.if (_rewardedAd != null){_rewardedAd.Destroy();_rewardedAd = null;}Debug.Log("Loading the rewarded ad.");// create our request used to load the ad.var adRequest = new AdRequest();// send the request to load the ad.RewardedAd.Load(_adUnitId, adRequest,(RewardedAd ad, LoadAdError error) =>{// if error is not null, the load request failed.if (error != null || ad == null){Debug.LogError("Rewarded ad failed to load an ad " +"with error : " + error);return;}Debug.Log("Rewarded ad loaded with response : "+ ad.GetResponseInfo());_rewardedAd = ad;});ShowRewardedAd();}public void ShowRewardedAd()
{const string rewardMsg ="Rewarded ad rewarded the user. Type: {0}, amount: {1}.";if (_rewardedAd != null && _rewardedAd.CanShowAd()){_rewardedAd.Show((Reward reward) =>{// TODO: Reward the user.Debug.Log(String.Format(rewardMsg, reward.Type, reward.Amount));});}
}public void DestroyRewardedAd()
{if (_rewardedAd != null){Debug.Log("Destroying rewardedAd view.");_rewardedAd.Destroy();_rewardedAd = null;}
}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Godot 学习笔记(1):环境配置

文章目录 前言Godot 环境配置相关链接最简单的按钮项目Sence打包最简单的按钮事件 总结 前言 我从小就有个梦想&#xff0c;我想做游戏。虽然我大学的时候选择了计算机&#xff0c;工作也是计算机&#xff0c;但是我一直没有时间去学游戏引擎。原因有二&#xff1a;第一&#…

问题解决:关于tomcat无法连接问题的解决

安装tomcat并配置环境变量 下载tomcat并安装 首先去tomcat官方网站,下载tomcat 进入tomcat官方网站之后&#xff0c;查看jdk应该对应的tomcat版本&#xff0c;点击图示的按钮 点击完毕之后&#xff0c;可以看到下述的页面 图中的表格可以看到对应的jdk版本与tomcat的版本之…

docker基础用法-2

文章目录 什么是dockerOCI&OCFOCIOCF docker架构docker镜像与镜像仓库docker对象安装及使用dockerdocker安装docker加速docker常用操作docker event state防火墙状态及规则 什么是docker docker中的容器&#xff1a; lxc --> libcontainer --> runC docker最开始是…

Qt for Mac阻止MacOS系统休眠

Qt开发的应用程序如果电脑休眠了会影响软件的使用&#xff0c;因此在软件的使用过程中需要防止电脑休眠&#xff0c;在Win上有专门的API进行处理&#xff0c;在Mac上也必需使用Mac平台自身的API&#xff0c;本篇介绍在Mac平台下使用Qt阻止Mac系统休眠。 要调用Mac系统的API&am…

如何用Selenium通过Xpath,精准定位到“多个相同属性值以及多个相同元素”中的目标属性值

前言 本文是该专栏的第21篇,后面会持续分享python爬虫干货知识,记得关注。 相信很多同学,都有使用selenium来写爬虫项目或者自动化页面操作项目。同样,也相信很多同学在使用selenium来定位目标元素的时候,或多或少遇见到这样的情况,就是用Xpath定位目标元素的时候,页面…

html5cssjs代码 023 公制计量单位进位与换算表

html5&css&js代码 023 公制计量单位进位与换算表 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;用于展示公制计量单位的进位与换算表。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8&quo…

新!PCA+DBO+K-means聚类,蜣螂优化算法DBO优化K-means,适合学习,也适合发paper。

PCADBOK-means聚类&#xff0c;蜣螂优化算法DBO优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、 蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optimizer, DBO…

【开源】SpringBoot框架开发就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

数学建模博弈理论与实践国防科大版

目录 4.博弈模型 4.1.Nash平衡点和帕雷托最优 4.2.囚徒困境 4.3.智猪博弈 4.4.脏脸之谜 5.军事问题数学建模 5.1.兰彻斯特作战模型 5.1.1.一般战斗模型 5.1.2游击战模型 5.1.3.混合战模型 5.2.硫磺岛战役 4.博弈模型 本讲介绍博弈模型&#xff0c;包括博弈论&#x…

u盘文件损坏怎么恢复数据?分享三个数据恢复方法

随着科技的飞速发展&#xff0c;U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而&#xff0c;由于各种原因&#xff0c;如不当操作、病毒感染或硬件故障等&#xff0c;U盘中的文件可能会受到损坏。那么&#xff0c;当U盘文件损坏时&#xff0c;我们该如何恢复数据呢…

【回归预测】基于DBO-BP(蜣螂优化算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#68】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 蜣螂优化算法3. DBO-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神…

FFmpeg分析视频信息输出到指定格式(csv/flat/ini/json/xml)文件中

1.查看ffprobe帮助 输出格式参数说明: 本例将演示输出csv,flat,ini,json,xml格式 输出所使用的参数如下: 1.输出csv格式: ffprobe -i 4K.mp4 -select_streams v -show_frames -of csv -o 4K.csv 输出: 2.输出flat格式: ffprobe -i 4K.mp4 -select_streams v -show_frames …

玩转C语言——数组初探

一、前言 通过前面的学习&#xff0c;我们已了解C语言的结构变量、分支结构和循环结构。今天&#xff0c;我们一起来认识C语言的另一知识点——数组。先赞后看&#xff0c;养成习惯。 二、数组概念 学习数组&#xff0c;我们要明白数组是什么。在我看来&#xff1a;数组是⼀组…

云服务器2核4G5M配置代表什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么&#xff1f;代表2核CPU、4G内存、5M公网带宽&#xff0c;这是一款轻量应用服务器&#xff0c;系统盘为60GB SSD云硬盘&#xff0c;活动页面 txybk.com/go/txy 活动打开如下图&#xff1a; 腾讯云2核4G5M服务器 如上图所示&#xff0c;这…

练习8 Web [GYCTF2020]Blacklist

这道题其实不是堆叠注入&#xff0c;但是我在联合查询无效后&#xff0c;试了一下堆叠&#xff0c;最后一步发现被过滤的sql语句太多了&#xff0c;完全没法 查阅其他wp的过程[GYCTF2020]Blacklist 1&#xff08;详细做题过程&#xff09; 是用的handler语句&#xff0c;只能用…

cmd常用指令

cmd全称Command Prompt&#xff0c;中文译为命令提示符。 命令提示符是在操作系统中&#xff0c;提示进行命令输入的一种工作提示符。 在不同的操作系统环境下&#xff0c;命令提示符各不相同。 在windows环境下&#xff0c;命令行程序为cmd.exe&#xff0c;是一个32位的命令…

【系统性】 循序渐进学C++

循序渐进学C 第一阶段&#xff1a;基础 一、环境配置 1.1.第一个程序&#xff08;基本格式&#xff09; ​ #include <iosteam> using namespace std;int main(){cout<<"hello world"<<endl;system("pause"); }​ 模板 #include &…

email + celery+django 异步发送邮件功能的实现

主要流程&#xff1a; django通过发件服务器到收件服务器&#xff0c;最后到收件人 邮件配置设置需要打开SMTP/IMAP并获的授权码&#xff0c;完成授权功能实现发送给收件人 邮件配置请参考另一博客https://blog.csdn.net/qq_44238024/article/details/136277821 项目结构树…

蓝桥杯刷题(十)

1.翻转 代码 输入数据&#xff0c;每组数据进行比较&#xff0c;j的范围掐头去尾&#xff0c;若a[j]b[j]&#xff0c;继续&#xff0c;若出现010,101子串则改成000,111&#xff0c;遍历完后比较a是否等于b&#xff0c;相同则输出次数&#xff0c;不同则输出-1。 for _ in ran…

JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦

1 Vue 1.1 Vue介绍 VUE是前端框架&#xff0c;基于MVVM&#xff0c;实现数据双向绑定 框架是半基础软件&#xff0c;可重用的代码模型 1.2 Vue指令 <script src"js/vue.js"></script></head> <body><div id"id"><!--…