admin管理员组文章数量:1642241
一、Cloud设置
创建一个新的project https://cloud.unity/
要确保项目中的Unity Project ID和云端的Project ID保持一致
这里的Game ID也要和unity项目中的相同,可以通过代码设置
二、创建unity项目
(这里我试了很多版本、不知道是版本不兼容还是什么原因,我的只有20、21版本的unity下载了Advertisement Legacy 这个插件后可以在 Project Settings -> Sercives下出现Ads,求解 >.<'' )
首先我们需要安装 Advertisement Legacy 插件和 Android Logcat 插件
将Project Settings --> Services --> Ads 打开
这里通过选择云端创建的project, 注意设置要和云端一样。
这些准备工作完成之后我们就可以来写脚本啦。
三、搭建场景、编写代码
将脚本挂在空对象上(这里可以不需要初始化按钮,防止加载不稳定,我测试在这里加了初始化按钮确保可以正确加载)给按钮添加相对应的事件
using System;
using UnityEngine;
using UnityEngine.Advertisements;
public class UintyAdsManager : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
{
public static UintyAdsManager Ins;
[SerializeField] string _androidGameId = "5656241";
[SerializeField] string _iOSGameId = "5656240";
[SerializeField] bool _testMode = true;
private string _gameId;
void Awake()
{
Ins = this;
InitializeAds();
}
public void InitializeAds()
{
#if UNITY_IOS
_gameId = _iOSGameId;
#elif UNITY_ANDROID
_gameId = _androidGameId;
#elif UNITY_EDITOR
_gameId = _androidGameId;
#endif
if (!Advertisement.isInitialized && Advertisement.isSupported)
{
Advertisement.Initialize(_gameId, _testMode, this);
}
}
public void OnInitializationComplete()
{
Debug.Log("Unity Ads 广告初始化完成.");
InitAdUnit();
InitRewardAD();
InitBanner();
}
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
{
Debug.Log($"Unity Ads 广告初始化失败: {error.ToString()} - {message}");
}
#region 插屏广告
// 插屏广告ID
string _androidAdUnitId = "Interstitial_Android";
string _iOsAdUnitId = "Interstitial_iOS";
string _adInterstitialId;
private bool _InterstitialLoaded = false;
void InitAdUnit()
{
_adInterstitialId = (Application.platform == RuntimePlatform.IPhonePlayer)
? _iOsAdUnitId
: _androidAdUnitId;
LoadInterstitialAd();
}
/// <summary>
/// 加载插屏
/// </summary>
public void LoadInterstitialAd()
{
if (_InterstitialLoaded) return;
Debug.Log("Loading Ads 加载插屏广告ID: " + _adInterstitialId);
Advertisement.Load(_adInterstitialId, this);
}
/// <summary>
/// 展示插屏
/// </summary>
public void ShowInterstitialAd()
{
if (_InterstitialLoaded)
{
Debug.Log("Showing Ads 显示广告ID: " + _adInterstitialId);
Advertisement.Show(_adInterstitialId, this);
}
else
{
LoadInterstitialAd();
}
}
#endregion 插屏
#region 激励视频
string _androidRewardedUnitId = "Rewarded_Android";
string _iOSRewardedId = "Rewarded_iOS";
string _adRewardedId = "Rewarded_Android";//
private bool _RewardLoaded = false;
void InitRewardAD()
{
#if UNITY_IOS
_adRewardedId = _iOSRewardedId;
#elif UNITY_ANDROID
_adRewardedId = _androidRewardedUnitId;
#endif
LoadRewardedAd();
}
/// <summary>
/// 加载激励视频
/// </summary>
public void LoadRewardedAd()
{
if (_RewardLoaded) return;
Debug.Log("Loading Ad: " + _adRewardedId);
Advertisement.Load(_adRewardedId, this);
}
/// <summary>
/// 展示激励视频
/// </summary>
public void ShowRewardedAd()
{
Advertisement.Show(_adRewardedId, this);
}
#endregion
#region Banner
[SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;
string _androidBannerId = "Banner_Android";//TpxxlLobbyPopBanner
string _iOSBannerId = "Banner_iOS";
string _adBannerId = "Banner_Android";
private bool _adBannerLoaded = false;
void InitBanner()
{
// Get the Ad Unit ID for the current platform:
#if UNITY_IOS
_adBannerId = _iOSBannerId;
#elif UNITY_ANDROID
_adBannerId = _androidBannerId;
#endif
// 设置Banner显示位置
Advertisement.Banner.SetPosition(_bannerPosition);
}
public void LoadBanner()
{
if (_adBannerLoaded) return;
// Set up options to notify the SDK of load events:
BannerLoadOptions options = new BannerLoadOptions
{
loadCallback = OnBannerLoaded,
errorCallback = OnBannerError
};
// Load the Ad Unit with banner content:
Advertisement.Banner.Load(_adBannerId, options);
}
void OnBannerLoaded()
{
_adBannerLoaded = true;
Debug.Log("Banner Ads 加载完成");
}
void OnBannerError(string message)
{
_adBannerLoaded = false;
Debug.Log($"Banner Ads 加载失败 Error: {message}");
// 可选地执行附加代码,例如尝试加载另一个广告。
}
/// <summary>
/// 展示Banner
/// </summary>
public void ShowBannerAd()
{
if (!_adBannerLoaded)
{
LoadBanner();
}
else
{
BannerOptions options = new BannerOptions
{
clickCallback = OnBannerClicked,
hideCallback = OnBannerHidden,
showCallback = OnBannerShown
};
// Show the loaded Banner Ad Unit:
Advertisement.Banner.Show(_adBannerId, options);
}
}
/// <summary>
/// 隐藏Banner
/// </summary>
public void HideBannerAd()
{
Advertisement.Banner.Hide();
}
void OnBannerClicked() { }
void OnBannerShown() { }
void OnBannerHidden()
{
LoadBanner();
}
#endregion
public void OnUnityAdsAdLoaded(string adUnitId)
{
// 如果广告单元成功加载内容,则可选择执行代码。
Debug.Log("Showing Ads 加载广告完成ID: " + adUnitId);
if (adUnitId == _androidAdUnitId || adUnitId == _iOsAdUnitId)
{
_InterstitialLoaded = true;
}
else if (adUnitId == _androidRewardedUnitId || adUnitId == _iOSRewardedId)
{
_RewardLoaded = true;
}
}
public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message)
{
Debug.Log($"Error Ads 加载广告失败 Unit: {_adUnitId} - {error.ToString()} - {message}");
if (_adUnitId == _androidAdUnitId || _adUnitId == _iOsAdUnitId)
{
_InterstitialLoaded = false;
}
else if (_adUnitId == _androidRewardedUnitId || _adUnitId == _iOSRewardedId)
{
_RewardLoaded = false;
}
}
public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message)
{
Debug.Log($"Error Ads 展示广告失败 Unit {_adUnitId}: {error.ToString()} - {message}");
// 如果广告单元无法显示,可以选择执行代码,例如加载另一个广告
if (_adUnitId == _androidAdUnitId || _adUnitId == _iOsAdUnitId)
{
_InterstitialLoaded = false;
}
else if (_adUnitId == _androidRewardedUnitId || _adUnitId == _iOSRewardedId)
{
_RewardLoaded = false;
}
}
public void OnUnityAdsShowStart(string _adUnitId) { }
public void OnUnityAdsShowClick(string _adUnitId) { }
private Action<bool> RewardedAdClose;
// 视频展示完成发放奖励:
public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
{
if (adUnitId.Equals(adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
{
Debug.Log("Unity Ads 激励视频播放完成");
// 发放奖励
RewardedAdClose(true);
}
// 加载新的激励视频
if (adUnitId == _androidRewardedUnitId || adUnitId == _iOSRewardedId)
{
_RewardLoaded = false;
LoadRewardedAd();
}
else if (adUnitId == _androidAdUnitId || adUnitId == _iOsAdUnitId)
{
_InterstitialLoaded = false;
LoadInterstitialAd();
}
}
}
这样就可以接入Ads啦。(注意要先加载再播放哦)
这里Banner加载在底部。
版权声明:本文标题:Unity Ads接入 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729327906a1195999.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论