1

私はこのエラーを理解するのに苦労しています。コードは私の他のプロジェクトでは機能しますが、何らかの理由でこのプロジェクトでは機能しません。

これがエラーです

NullReferenceException: オブジェクト参照がオブジェクト LevelManager.AdsLoadlevel (System.String name) のインスタンスに設定されていません (Assets/Scripts/LevelManager.cs:21 で) LevelManager.ScoreLevelLoad () (Assets/Scripts/LevelManager.cs:46 で) UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (/Users/builduser/buildslave/unity/build/Runtime/Export/UnityEvent.cs:153) UnityEngine.Events.InvokableCallList.Invoke (System.Object[ ] パラメーター) (/Users/builduser/buildslave/unity/build/Runtime/Export/UnityEvent.cs:634 で) UnityEngine.Events.UnityEventBase.Invoke (System.Object[] パラメーター) (/Users/builduser/buildslave/ で) unity/build/Runtime/Export/UnityEvent.cs:769) UnityEngine.Events.UnityEvent.Invoke () (/Users/builduser/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:53) UnityEngine.UI.ボタン。() を押します (/Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35 で) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) ( /Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44 で) UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler ハンドラー、UnityEngine.EventSystems.BaseEventData eventData) (で/Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:52) UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject ターゲット、UnityEngine.EventSystems.BaseEventData eventData、 UnityEngine.EventSystems.EventFunction`1 ファンクター) (/Users/builduser/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269) UnityEngine.EventSystems.EventSystem:アップデート()

これは LevelManager クラスのコードです

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;


public class LevelManager : MonoBehaviour {

private AdsManager ads;



// Use this for initialization
void Start () {
    ads = GameObject.FindObjectOfType<AdsManager> ();

}

//LEVELMANAGEMENT

public void AdsLoadlevel(string name){
    ads.ShowRewardedAd ();
    SceneManager.LoadScene(name);   
}

public void LoadLevel(string name){
    SceneManager.LoadScene(name); 
}




//For death
private void LoadLevelDeath(){
    SceneManager.LoadScene ("LoseScreen");
}

public void DeathLevel(){
    Invoke ("LoadLevelDeath", 2.5f);
}



//Score level management
public void ScoreLevelLoad(){
    if (Score.score < 200) {
        AdsLoadlevel ("Level1");
    } 

    if (Score.score >= 200 && Score.score < 400) {
        AdsLoadlevel ("Level2");
    }

    if (Score.score >= 400 && Score.score < 600) {
        AdsLoadlevel ("Level3");
    }

    if (Score.score >= 600 && Score.score < 800) {
        AdsLoadlevel ("Level4");
    }

    if (Score.score >= 800 && Score.score < 1000) {
        AdsLoadlevel ("Level5");
    }


}
}

これは AdsManager クラスのコードです

using UnityEngine;
using System.Collections;
using UnityEngine.Advertisements;

public class AdsManager : MonoBehaviour {


public void ShowAd()
{
    if (Advertisement.IsReady())
    {
        Advertisement.Show();
    }
}


public void ShowRewardedAd()
{
    if (Advertisement.IsReady("rewardedVideo"))
    {
        var options = new ShowOptions { resultCallback = HandleShowResult };
        Advertisement.Show("rewardedVideo", options);
    }
}

private void HandleShowResult(ShowResult result)
{
    switch (result)
    {
    case ShowResult.Finished:
        Debug.Log("The ad was successfully shown.");


        //
        // YOUR CODE TO REWARD THE GAMER
        // Give coins etc.



        break;
    case ShowResult.Skipped:
        Debug.Log("The ad was skipped before reaching the end.");
        break;
    case ShowResult.Failed:
        Debug.LogError("The ad failed to be shown.");
           break;
       }
   }
}

ボタンを押して ScoreLevelLoad 関数を呼び出すとエラーが発生し、強調表示されている行は「ads.ShowRewardedAd()」です。また、参照が見つからないという警告が表示され、それをクリックすると「Unity ads コルーチン ホスト」と表示されることがあります。私はこれに数日間苦労しており、理解できないようです。

4

1 に答える 1