インスタンスに参照値がないというエラーを解消したい
お世話になります。以前、admobの表示/非表示の切り替えについて別クラスから変数をアクセスする方法について質問させて頂いております。そちらについてはおかげさまで解消でき、エラーも無くなったのですが実際に動かしてみると実装した箇所でエラー(インスタンスに参照値がありません)が発生しており困っています。
プログラムの内容としては、表示されているadmobのバナー表示/非表示を切り替える為のコンポーネントとなります。admobバナーの表示は行えており、表示/非表示のクラスもadmobの機能に入っているようですのでそちらを使用しています。
発生している問題・エラーメッセージ
エラーメッセージ NullReferenceException: Object reference not set to an instance of an object
該当のソースコード
C#
1//AdbunnerComponent.cs 2using UnityEngine; 3using System.Collections; 4using System.Collections.Generic; 5using GoogleMobileAds.Api; 6 7namespace Novel 8{ 9 //バナー表示用処理 10 public class AdshowComponent:AbstractComponent 11 { 12 //Admob.csから呼び出せるようインスペクタから設定しておく 13 public AdMob admob; 14 15 public AdshowComponent() 16 { 17 //コンポーネントの変数設定部分。 18 } 19 20 public override void start () 21 { 22 //AdMobのインスタンスにあるbannerView変数を使う 23 //admobから処理を呼び出してバナーを表示状態にする。 24 //↓エラー箇所 25 admob.bannerView.Show(); 26 27 //次のシナリオに進む処理 28 this.gameManager.nextOrder (); 29 30 } 31 } 32 //バナー非表示用処理 33 public class AdhideComponent:AbstractComponent 34 { 35 //表示処理と類似処理 36 37 } 38} 39
admob.bannerView.Show(); の所でインスタンスの参照値が無いというエラーが表示されます。
外部のadmobクラスでインスタンスを作成しており、それを引っ張ってきて表示/非表示を切り替えるようにしています。
admobクラスのプログラムは下記の通り。
C#
1//AdMob.cs 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6using GoogleMobileAds.Api; 7 8public class AdMob : MonoBehaviour { 9 //バナービューに外からアクセス出来るようにしておく(インスペクタには出さない) 10 [HideInInspector] 11 public BannerView bannerView; 12 13 // Use this for initialization 14 void Start () { 15 16 // アプリID、 これはテスト用 17 string appId = "ca-app-pub-3940256099942544~3347511713"; 18 19 // Initialize the Google Mobile Ads SDK. 20 MobileAds.Initialize(appId); 21 22 RequestBanner(); 23 } 24 25 private void RequestBanner(){ 26 27 // 広告ユニットID これはテスト用 28 string adUnitId = "ca-app-pub-3940256099942544/6300978111"; 29 30 // Create a 320x50 banner at the top of the screen. 31 //※メンバ変数(Startの前に書いた変数)に入れる 32 bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top); 33 34 // Create an empty ad request. 35 AdRequest request = new AdRequest.Builder().Build(); 36 37 // Load the banner with the request. 38 bannerView.LoadAd(request); 39 40 // Create a 320x50 banner at the top of the screen. 41 //bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top); 42 } 43 44 // Update is called once per frame 45 void Update () { 46 47 } 48} 49
AdMob.csはオブジェクトにアタッチしており、バナー表示は正常に機能しています。
bannerViewのインスタンスはこちらのクラスで作成しており、作成したコンポーネントで表示/非表示を切り替えるという動作を考えています。
バナーの表示はされている→admobのインスタンスは動作しておりNullではないはず??
と考えており、詰まってしまっている所です。何が原因でどのようにすれば解消できるのでしょうか。
何かお気づきのことがあればご教示いただけますと幸いです。
試したこと
bannerViewの対象となるオブジェクトが参照されていないのではと考え、オブジェクトの参照を試みましたが改善できず。(そもそもバナー表示はできているのでオブジェクトは参照できている?)
補足情報(FW/ツールのバージョンなど)
Unity Version 2019.1.13
AdmobSDK GoogleMobileAds-v4.1.0
Admob実装時の参考サイト(AdMob.cs)
https://uni.gas.mixh.jp/unity/android-admob.html
回答1件
あなたの回答
tips
プレビュー