Как исправить Тип не содержит определения для «Показать» и метод расширения не может быть найден - PullRequest
0 голосов
/ 12 апреля 2019

Привет всем, как дела? Я в порядке. Я пытаюсь написать сценарии для монетизации игры Unity3d. Я написал скрипт для инициализации рекламы Admob, а сейчас пишу другой скрипт для загрузки и показа рекламы. Я следую учебному пособию по Admob, но у меня есть некоторые ошибки, которые я не знаю, как исправить.

Тип InterstitialAd не содержит конструктора, который принимает аргументы «1»

Тип «InterstitialAd» не содержит определения для «LoadAd», и метод расширения «LoadAd» типа «InterstitialAd» не найден. Вам не хватает ссылки на сборку?

Тип «InterstitialAd» не содержит определения для «IsLoaded», и не найдено никакого метода расширения «IsLoaded» типа «InterstitialAd». Вам не хватает ссылки на сборку?

Тип «InterstitialAd» не содержит определения для «Show», и метод расширения «Show» типа «InterstitialAd» не найден. Вам не хватает ссылки на сборку?

Кажется, мне нужно написать конструктор, а методы не определены, но я следую инструкциям руководства по монетизации AdMob, и предполагается, что использование API Admob загрузит методы, но это не работает .

Это мой код:

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

    public class InterstitialAd : MonoBehaviour 
    {
        private InterstitialAd interstitial;
        private string adUnitId;

        private void requestInterstitial() 
        {
            //Los siguientes adUnitId son anuncios de prueba, antes de publicarlo debo reemplazar adUnitId con el id del bloque de anuncios
#if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/4411468910";
#else
            string adUnitId = "unexpected_platform";
#endif

            // Initialize an InterstitialAd. //Id Del bloque de anuncios
            this.interstitial = new InterstitialAd(adUnitId);
            // Use this for initialization
            // Create an empty ad request.
            AdRequest request = new AdRequest.Builder().Build();
            //Load the interstitial with the request interstitial
             this.interstitial.LoadAd(request);
        }

        //ShowAd
        private void showInterstitial() 
        {
            if (Time.time % 45 == 0 && Time.timeSinceLevelLoad > 60 && this.interstitial.IsLoaded()) 
            {
                this.interstitial.Show();
            }
        }
    }

Надеюсь, вы мне поможете! Это последний шаг для публикации моего приложения!

1 Ответ

0 голосов
/ 12 апреля 2019

У вас есть конфликт имен между вашим собственным классом InterstitialAd : MonoBehaviour и уже существующим GoogleMobileAds.Api.InterstitialAd

Так что, когда вы делаете

private InterstitialAd interstitial;

new InterstitialAd(adUnitId);

this.interstitial.LoadAd(request);

this.interstitial.IsLoaded()

this.interstitial.Show();

, он всегда пытается сделать это на вашемсобственный InterstitialAd : MonoBehaviour тип, который не реализует эти свойства / методы.


Вы должны либо переименовать свой класс, например,

public class IntersitialAdController : MonoBehaviour 
{
    ...
}

Если вы это сделаете, убедитесь, что такжеимя файла изменяется так, чтобы оно совпадало с именем Behviours IntersitialAdController.cs (на диске) или без .cs в представлении Unity Project.

Или, в качестве альтернативы, везде можно получить доступ к правильному типу через его полное пространство имен:

private GoogleMobileAds.Api.InterstitialAd interstitial;

new GoogleMobileAds.Api.InterstitialAd(adUnitId);

etc ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...