说在前面的话,Unity ADS是Unity官方做的广告变现平台,但广告在我国大陆无法使用,开发时测试的话需要上代理才能看到请求的广告。
如果游戏不准备发布到海外市场,可以不考虑这个平台。
一、注册Unity ADS平台的准备
https://dashboard.unity3d.com/gaming/organizations
注册的Unity账户使用和UnityHub一样的。
注册成功后,在项目中找到与你的Unity工程同名的项目,如果没有则新建
并且在快捷方式上添加Unity Ads Monetization模块
点击模块,选择你的项目。启用广告功能。
二、Unity初始化
可以参考https://docs.unity.com/ads/en-us/manual/CreatingUnityProjects官方文档进行操作。
1.安装SDK
在 Unity 编辑器中,选择 Window > Package Manager。
在“包管理器”窗口中,从列表中选择“Advertisement Legacy”包,然后选择最新验证的版本。
2.设置SDK
在编辑器中选择Edit>ProjectSettings
找到Services>Ads 将点击右侧的OFF,将状态改为ON(开启状态)
初次进入界面会提示没有连接到服务器项目之类,在下方选择你在网站上已有或新创建的项目。
并添加GameID(在网页的设置里)
3.代码初始化SDK
using UnityEngine;
using UnityEngine.Advertisements;public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener
{[SerializeField] string _androidGameId;[SerializeField] string _iOSGameId;[SerializeField] bool _testMode = true;private string _gameId;void Awake(){InitializeAds();}public void InitializeAds(){#if UNITY_IOS_gameId = _iOSGameId;#elif UNITY_ANDROID_gameId = _androidGameId;#elif UNITY_EDITOR_gameId = _androidGameId; //Only for testing the functionality in the Editor#endifif (!Advertisement.isInitialized && Advertisement.isSupported){Advertisement.Initialize(_gameId, _testMode, this);}}public void OnInitializationComplete(){Debug.Log("Unity Ads initialization complete.");}public void OnInitializationFailed(UnityAdsInitializationError error, string message){Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");}
}
三、添加广告
1.插页式广告
要使用 Advertisements API 展示全屏插页式广告,请初始化 SDK,然后使用 Load 函数将广告内容加载到 Ad Unit 和 Show 函数展示广告。
using UnityEngine;
using UnityEngine.Advertisements;public class InterstitialAdExample : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{[SerializeField] string _androidAdUnitId = "Interstitial_Android";[SerializeField] string _iOsAdUnitId = "Interstitial_iOS";string _adUnitId;void Awake(){// Get the Ad Unit ID for the current platform:_adUnitId = (Application.platform == RuntimePlatform.IPhonePlayer)? _iOsAdUnitId: _androidAdUnitId;}// Load content to the Ad Unit:public void LoadAd(){// IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).Debug.Log("Loading Ad: " + _adUnitId);Advertisement.Load(_adUnitId, this);}// Show the loaded content in the Ad Unit:public void ShowAd(){// Note that if the ad content wasn't previously loaded, this method will failDebug.Log("Showing Ad: " + _adUnitId);Advertisement.Show(_adUnitId, this);}// Implement Load Listener and Show Listener interface methods: public void OnUnityAdsAdLoaded(string adUnitId){// Optionally execute code if the Ad Unit successfully loads content.}public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message){Debug.Log($"Error loading Ad Unit: {_adUnitId} - {error.ToString()} - {message}");// Optionally execute code if the Ad Unit fails to load, such as attempting to try again.}public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message){Debug.Log($"Error showing Ad Unit {_adUnitId}: {error.ToString()} - {message}");// Optionally execute code if the Ad Unit fails to show, such as loading another ad.}public void OnUnityAdsShowStart(string _adUnitId) { }public void OnUnityAdsShowClick(string _adUnitId) { }public void OnUnityAdsShowComplete(string _adUnitId, UnityAdsShowCompletionState showCompletionState) { }
}
2.激励广告
奖励观看广告的玩家可以提高用户参与度,从而带来更高的收入。例如,游戏可能会用游戏内货币、消耗品、额外生命或经验乘数奖励玩家。
要奖励完成视频广告的玩家,请实施一个回调方法,使用结果来检查用户是否完成了广告并应获得奖励。ShowResult
使用提示玩家选择观看广告的按钮是激励视频广告的常见实现方式。在以下步骤中使用示例代码创建激励广告按钮。只要广告内容可用,按下该按钮就会显示广告。
(1)创建按钮A绑定LoadAd方法
(2)创建按钮B绑定到脚本的_showAdButton变量
需要现请求广告内容,请求完毕后,在播放广告。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;public class RewardedAdsButton : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{[SerializeField] Button _showAdButton;[SerializeField] string _androidAdUnitId = "Rewarded_Android";[SerializeField] string _iOSAdUnitId = "Rewarded_iOS";string _adUnitId = null; // This will remain null for unsupported platformsvoid Awake(){ // Get the Ad Unit ID for the current platform:
#if UNITY_IOS_adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID_adUnitId = _androidAdUnitId;
#endif// Disable the button until the ad is ready to show:_showAdButton.interactable = false;}// Call this public method when you want to get an ad ready to show.public void LoadAd(){// IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).Debug.Log("Loading Ad: " + _adUnitId);Advertisement.Load(_adUnitId, this);}// If the ad successfully loads, add a listener to the button and enable it:public void OnUnityAdsAdLoaded(string adUnitId){Debug.Log("Ad Loaded: " + adUnitId);if (adUnitId.Equals(_adUnitId)){// Configure the button to call the ShowAd() method when clicked:_showAdButton.onClick.AddListener(ShowAd);// Enable the button for users to click:_showAdButton.interactable = true;}}// Implement a method to execute when the user clicks the button:public void ShowAd(){// Disable the button:_showAdButton.interactable = false;// Then show the ad:Advertisement.Show(_adUnitId, this);}// Implement the Show Listener's OnUnityAdsShowComplete callback method to determine if the user gets a reward:public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState){if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED)){Debug.Log("Unity Ads Rewarded Ad Completed");// Grant a reward.}}// Implement Load and Show Listener error callbacks:public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message){Debug.Log($"Error loading Ad Unit {adUnitId}: {error.ToString()} - {message}");// Use the error details to determine whether to try to load another ad.}public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message){Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");// Use the error details to determine whether to try to load another ad.}public void OnUnityAdsShowStart(string adUnitId) { }public void OnUnityAdsShowClick(string adUnitId) { }void OnDestroy(){// Clean up the button listeners:_showAdButton.onClick.RemoveAllListeners();}
}
3.横幅广告
在脚本头中,声明包含 Banner 类的命名空间。接下来,初始化 SDK,然后使用 Banner.Load 和 Banner.Show 方法加载并展示横幅广告。UnityEngine.Advertisements
以下示例脚本演示如何在场景中设置按钮以测试此功能。要在 Unity 编辑器中创建按钮,请在 UI > Button >选择 Game Object 。
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;public class BannerAdExample : MonoBehaviour
{// For the purpose of this example, these buttons are for functionality testing:[SerializeField] Button _loadBannerButton;[SerializeField] Button _showBannerButton;[SerializeField] Button _hideBannerButton;[SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;[SerializeField] string _androidAdUnitId = "Banner_Android";[SerializeField] string _iOSAdUnitId = "Banner_iOS";string _adUnitId = null; // This will remain null for unsupported platforms.void Start(){// Get the Ad Unit ID for the current platform:
#if UNITY_IOS_adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID_adUnitId = _androidAdUnitId;
#endif// Disable the button until an ad is ready to show:_showBannerButton.interactable = false;_hideBannerButton.interactable = false;// Set the banner position:Advertisement.Banner.SetPosition(_bannerPosition);// Configure the Load Banner button to call the LoadBanner() method when clicked:_loadBannerButton.onClick.AddListener(LoadBanner);_loadBannerButton.interactable = true;}// Implement a method to call when the Load Banner button is clicked:public void LoadBanner(){// 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(_adUnitId, options);}// Implement code to execute when the loadCallback event triggers:void OnBannerLoaded(){Debug.Log("Banner loaded");// Configure the Show Banner button to call the ShowBannerAd() method when clicked:_showBannerButton.onClick.AddListener(ShowBannerAd);// Configure the Hide Banner button to call the HideBannerAd() method when clicked:_hideBannerButton.onClick.AddListener(HideBannerAd);// Enable both buttons:_showBannerButton.interactable = true;_hideBannerButton.interactable = true; }// Implement code to execute when the load errorCallback event triggers:void OnBannerError(string message){Debug.Log($"Banner Error: {message}");// Optionally execute additional code, such as attempting to load another ad.}// Implement a method to call when the Show Banner button is clicked:void ShowBannerAd(){// Set up options to notify the SDK of show events:BannerOptions options = new BannerOptions{clickCallback = OnBannerClicked,hideCallback = OnBannerHidden,showCallback = OnBannerShown};// Show the loaded Banner Ad Unit:Advertisement.Banner.Show(_adUnitId, options);}// Implement a method to call when the Hide Banner button is clicked:void HideBannerAd(){// Hide the banner:Advertisement.Banner.Hide();}void OnBannerClicked() { }void OnBannerShown() { }void OnBannerHidden() { }void OnDestroy(){// Clean up the listeners:_loadBannerButton.onClick.RemoveAllListeners();_showBannerButton.onClick.RemoveAllListeners();_hideBannerButton.onClick.RemoveAllListeners();}
}
默认情况下,横幅广告固定在屏幕的底部中央,支持 320 x 50 或 728 x 90 像素分辨率。要指定横幅锚点,请使用 API。例如:Banner.SetPosition
Advertisement.Banner.SetPosition (BannerPosition.TOP_CENTER);