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加载在底部。

本文标签: UnityADS