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.rhkb.cn/news/280975.html

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

相关文章

【鸿蒙HarmonyOS开发笔记】应用数据持久化之通过用户首选项实现数据持久化

概述 应用数据持久化&#xff0c;是指应用将内存中的数据通过文件或数据库的形式保存到设备上。内存中的数据形态通常是任意的数据结构或数据对象&#xff0c;存储介质上的数据形态可能是文本、数据库、二进制文件等。 HarmonyOS标准系统支持典型的存储数据形态&#xff0c;包…

如何配置VS Code环境

一、下载 Visual Studio Code - Code Editing. Redefined 二、傻瓜式安装 如果出现没有安装路径选择&#xff0c;则看下面图片 经过上面操作后&#xff0c;可以修改路径 三、按照下面步骤配置环境变量即可 Visual Studio Code 中的 C 和 MinGW-w64 入门

信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

Note# 2024-3-21 今天被一个做芯片测试的客户追着问&#xff0c;应该合作在测试仪上做完全自定义的报文&#xff0c;添加自己的私有协议进去&#xff0c;他觉得每次都导入报头太麻烦了&#xff0c;然后就看了下Application Note关于CDF功能的描述&#xff0c;照着机翻的版本来…

D55125ADA A型漏电保护芯片,适用于 110V⁓220V(50/60Hz)电压,可应用于 新能源充电桩(充电枪)、智能空开(智能微断开关)等工业产品

一、应用领域 新能源充电桩&#xff08;充电枪&#xff09;、智能空开&#xff08;智能微断开关&#xff09;等工业产品&#xff0c;以及电热水器、电烤箱、电烤炉等小家电产品。 二、功能介绍 D55125ADA 是一款高性能 CMOS 漏电保护器专用电路。芯片内部包含稳压电源、放大电路…

IP 协议的相关特性

1.IP协议的特性 无连接性。IP协议是一种无连接协议&#xff0c;这意味着数据包在传输过程中不需要保留连接状态信息。每个数据包都是独立发送和处理的&#xff0c;每个包都可以按不同的路径传输到目的地。 不可靠性。IP协议不提供任何可靠性保证&#xff0c;数据包在传输过程…

设计模式 模板方法模式

01.如果接到一个任务&#xff0c;要求设计不同型号的悍马车 02.设计一个悍马车的抽象类&#xff08;模具&#xff0c;车模&#xff09; public abstract class HummerModel {/** 首先&#xff0c;这个模型要能够被发动起来&#xff0c;别管是手摇发动&#xff0c;还是电力发动…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(列表选择弹窗)

列表弹窗。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文&#xff0c;不可在UI上下文不明确的地方使用&#xff0c;参见UIContext说明。 从API version 10开始&#xff0…

什么是VR应急预案演练虚拟化|VR体验馆加盟|元宇宙文旅

VR 应急预案演练虚拟化指的是利用虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;技术进行应急预案演练的过程。在传统的应急预案演练中&#xff0c;人们通常需要在实际场地或模拟环境中进行演练&#xff0c;这可能存在一些限制&#xff0c;如成本高昂、场地受…

C语言每日一题06

一、题目 二、解析 void main &#xff08;&#xff09; { char c1&#xff0c;c2&#xff1b; int a1&#xff0c;a2&#xff1b; c1 getchar &#xff08;&#xff09;&#xff1b;//读取第一个输入&#xff0c;c11 scanf &#xff08;“%3d”&#xff0c;&a1&#xff…

MNN createSession 之创建流水线后端(四)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…

CSS学习(2)-盒子模型

1. CSS 长度单位 px &#xff1a;像素。em &#xff1a;相对元素 font-size 的倍数。rem &#xff1a;相对根字体大小&#xff0c;html标签就是根。% &#xff1a;相对父元素计算。 注意&#xff1a; CSS 中设置长度&#xff0c;必须加单位&#xff0c;否则样式无效&#xff…

19---时钟电路设计

视频链接 时钟硬件电路设计01_哔哩哔哩_bilibili 时钟电路设计 晶振是数字电路的心脏&#xff0c;数字电路需要一个稳定的工作时钟信号&#xff0c;时钟电路至关重要&#xff01; 1、晶振概述 晶振一般指晶体振荡器。晶体振荡器是指从一块石英晶体上按一定方位角切下薄片&…

python课后习题一

题目&#xff1a; 1. 2. 解题过程&#xff1a; 1. """计算年数和天数""" minute int(input("请输入分钟数&#xff1a;")) hours minute // 60 days hours // 24 years days // 365 last_days days % 365 print(f"{minut…

kafka集群介绍及搭建

介绍 kafka是一个高性能、低延迟、分布式的消息传递系统&#xff0c;特点在于实时处理数据。集群由多个成员节点broker组成&#xff0c;每个节点都可以独立处理消息传递和存储任务。 路由策略 发布消息由key、value组成&#xff0c;真正的消息是value&#xff0c;key是标识路…

使用Pygame做一个乒乓球游戏

项目介绍 使用Pygame做一个乒乓球游戏。左侧为电脑&#xff0c;右侧为玩家。 视频地址-YT 视频搬运-B站 视频教程约90分钟。 代码地址 环境&#xff1a;需要pygame库&#xff0c;可用pip安装&#xff1a;pip install pygame 1. 基础版本 首先进行一些初始化&#xff0c;初始…

PHP全新美化广告横幅在线制作源码

源码简介 可以做网站的引流不需要安装上传就可以使用&#xff0c;在第一版基础上做了二次开发更加好用 注意&#xff1a;主机和服务器均可架设搭建,如果使用宝塔架设点击访问的时候提示找不到文件路径的时候,记得点击网站目录把防跨站攻击先关闭,这样就可以正常访问了,这款是…

海格里斯HEGERLS托盘搬运机器人四向车引领三维空间集群设备柔性运维

随着市场的不断迅猛发展变化&#xff0c;在物流仓储中&#xff0c;无论是国内还是海外&#xff0c;都对托盘式解决方案需求量很大。顾名思义&#xff0c;托盘式解决方案简单理解就是将产品放置在托盘上进行存储、搬运和拣选。 面对托盘式方案需求&#xff0c;行业中常见的方案是…

如何在CentOS搭建docker compose ui可视化工具并无公网IP远程管理容器

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++ leetcode】双指针问题(续)

3. 202 .快乐数 题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结…

node.js快速入门-day03

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 web服务器创建…