You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Google AdMob脚本报错:无法将string转为指定Action类型

Google AdMob Unity脚本编译错误解决

错误信息

Argument 1: cannot convert from 'string' to 'System.Action<GoogleMobileAds.Api.InitializationStatus>'.

错误标记在Start()函数的MobileAds.Initialize(appID)代码行。

原脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds;
using System;

public class addmanager_script : MonoBehaviour 
{
    public BannerView bannerview;
    public InterstitialAd regularad;
    private string appID="ca-app-pub-5133215721502784~7588202759";
    private string regularID="ca-app-pub-5133215721502784/3265814366";
    // Use this for initialization
    void Start () 
    {
        MobileAds.Initialize (appID);
        //RequestAd ();
        RequestBanner ();
    }


    // Update is called once per frame
    void Update () 
    {

    }

    public void OnClickShowBanner()
    {
        this.RequestBanner ();
    }

    public void OnClickShowAd()
    {
        this.RequestAd ();
    }

    private void RequestAd()
    {
        regularad = new InterstitialAd (regularID);
        AdRequest request = new AdRequest.Builder ().Build ();
        regularad.LoadAd (request);
    }

    private void RequestBanner()
    {
        #if UNITY_ANDROID
        string bannerID = "ca-app-pub-5133215721502784/6909545908";
        #elif UNITY_IPHONE
        string adUnitId = bannerID;
        #else
        string bannerID  ="ca-app-pub-5133215721502784/6909545908";
        #endif

        bannerview = new BannerView (bannerID, AdSize.Banner, AdPosition.Bottom);
        AdRequest request = new AdRequest.Builder ().Build ();
        bannerview.LoadAd (request);
        bannerview.Show ();
        //bannerview.OnAdLoaded += HandleOnAdLoaded;

    }

    void HandleOnAdLoaded(object a, EventArgs args)
    {
        print ("loaded");
        bannerview.Show ();
    }

    public void Show()
    {
        if (regularad.IsLoaded ()) 
        {
           regularad.Show ();
         }

    }

}

解决方案

这个错误是因为新版Google AdMob Unity SDK修改了MobileAds.Initialize方法的参数规则:旧版本允许直接传入appID字符串,新版本该方法需要传入一个初始化完成的回调委托(Action<InitializationStatus>),appID需要单独通过平台专属方法设置。

修改步骤

  1. 移除Start()中直接传appID的初始化方式,先根据运行平台设置对应的appID
  2. 调用MobileAds.Initialize时传入回调委托,可在回调内处理初始化完成后的逻辑(比如请求广告)

修改后的核心代码

void Start () 
{
    // 根据平台设置App ID
    #if UNITY_ANDROID
        MobileAds.SetAndroidAppId(appID);
    #elif UNITY_IPHONE
        MobileAds.SetiOSAppId(appID);
    #endif

    // 初始化AdMob并传入回调
    MobileAds.Initialize(initStatus => {
        Debug.Log("AdMob初始化完成");
        RequestBanner();
        // RequestAd();
    });
}

额外修复点

  • 原RequestBanner()方法的UNITY_IPHONE分支存在未定义变量错误,需补充iOS专属的Banner广告单元ID:
private void RequestBanner()
{
    string bannerID;
    #if UNITY_ANDROID
        bannerID = "ca-app-pub-5133215721502784/6909545908";
    #elif UNITY_IPHONE
        bannerID = "你的iOS Banner广告单元ID"; // 替换为实际ID
    #else
        bannerID = "ca-app-pub-5133215721502784/6909545908";
    #endif

    // 剩余代码不变
}

完整修改后脚本示例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using System;

public class addmanager_script : MonoBehaviour 
{
    public BannerView bannerview;
    public InterstitialAd regularad;
    private string appID="ca-app-pub-5133215721502784~7588202759";
    private string regularID="ca-app-pub-5133215721502784/3265814366";
    private string iosBannerID = "你的iOS Banner广告单元ID";

    void Start () 
    {
        // 平台区分设置App ID
        #if UNITY_ANDROID
            MobileAds.SetAndroidAppId(appID);
        #elif UNITY_IPHONE
            MobileAds.SetiOSAppId(appID);
        #endif

        // 初始化并处理回调
        MobileAds.Initialize(initStatus => {
            Debug.Log("AdMob初始化完成");
            RequestBanner();
            // RequestAd();
        });
    }

    void Update () 
    {

    }

    public void OnClickShowBanner()
    {
        RequestBanner();
    }

    public void OnClickShowAd()
    {
        RequestAd();
    }

    private void RequestAd()
    {
        regularad = new InterstitialAd(regularID);
        AdRequest request = new AdRequest.Builder().Build();
        regularad.LoadAd(request);
    }

    private void RequestBanner()
    {
        string bannerID;
        #if UNITY_ANDROID
            bannerID = "ca-app-pub-5133215721502784/6909545908";
        #elif UNITY_IPHONE
            bannerID = iosBannerID;
        #else
            bannerID = "ca-app-pub-5133215721502784/6909545908";
        #endif

        bannerview = new BannerView(bannerID, AdSize.Banner, AdPosition.Bottom);
        AdRequest request = new AdRequest.Builder().Build();
        bannerview.LoadAd(request);
        bannerview.Show();
        // bannerview.OnAdLoaded += HandleOnAdLoaded;
    }

    void HandleOnAdLoaded(object a, EventArgs args)
    {
        print("Banner广告加载完成");
        bannerview.Show();
    }

    public void ShowInterstitial()
    {
        if (regularad != null && regularad.IsLoaded()) 
        {
           regularad.Show();
        }
    }
}

内容的提问来源于stack exchange,提问作者I K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:45:57