noutarins
@noutarins (nou tarins)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Get component メソッド 使用時の null referenceエラー

解決したいこと

C# Unity Vs です。
Get component メソッドを使い他のクラスのメソッドを呼び出したのですが、null referenceエラーがUnity実行中に出てしまいました。
どうしたら解決できるでしょう?

発生している問題・エラー

NullReferenceException: Object reference not set to an instance of an object

該当するソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;



public class CreateSlotScript : MonoBehaviour
{

    [SerializeField]
    private ItemDataBase itemDataBase;
    [SerializeField]
    private ItemManager itemManager;

    private void Start()
    {
        SlotMaker(itemDataBase.GetWeponLists());

    }

         private void SlotMaker(IEnumerable<WeponDate>weponDates)
    {
        foreach(var numbers in weponDates.OrderBy<WeponDate,int>(x => x.GetobjectNumber()))
        {
            //この中身が武器カテゴリのナンバー順に行われます。
            int objectnumber = numbers.GetobjectNumber();
            // エラーはこの行から出てます。
            int HowMany = GetComponent<ItemManager>().GetHowManyWeponByNumber(objectnumber);

            for (int i=0;i<HowMany;++i)
            {//この中身が各武器の所持数分行われます。
                Debug.Log(numbers.GetItemName());
            }

        }
    }
}

自分で試したこと

Unity 側で、ItemManagerをアタッチしても同じ行にエラーが出ます。
恐らくItemManagerのところがNullなんだと思うのですが、解決策がわかりません。
どうかお力添えをお願いします。

0

1Answer

エディタで、このコードがアタッチされているオブジェクトのインスペクタ全体のスクリーンショットを拝見することは可能でしょうか?
質問の本文に追記していただけると助かります。


    [SerializeField]
    private ItemManager itemManager;

とある(のに使われていない)ので、

    int HowMany = GetComponent<ItemManager>().GetHowManyWeponByNumber(objectnumber);

ではなく、

    int HowMany = itemManager.GetHowManyWeponByNumber(objectnumber);

として、インスペクタ上でitemManagerに、ItemManagerのコンポーネントを設定するのが、本来の意図なのかなぁ…と想像しました。

1Like

Comments

  1. @noutarins

    Questioner

    ありがとうございます。正に推測のとうりの意図でした。最初、
    int HowMany = GetComponent<itemManager>().GetHowManyWeponByNumber(objectnumber);と出来なくて、???となっていました。

Your answer might help someone💌