LoginSignup
watakabi
@watakabi

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【急募】SliderにおけるNullReferenceExceptionの対処法

UnityでNullReferenceExceptionに困らされています

Unityでスライダーに変数を代入するシステムを開発中です。
スライダーに関連する値をいじろうとするとすぐNullReferenceExceptionです。
解決方法を教えて下さい。

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

Object reference not set to an instance of an object
NyuusannControll.Start () (at Assets/Scripts/NyuusannControll.cs:13)

NyuusannControll.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NyuusannControll : MonoBehaviour{
    public static float Nyuusann = 100f ;
    public float Stamina = 100f;
    Slider nyuusann;
    void Start() 
    {
        Slider nyuusann = GetComponent<Slider>();
        nyuusann.maxValue = Stamina;
        //NullReferenceExceptionが二つ発生します
    }
    void Update()
    {
    //乳酸値が限界を超えないようにするためです。
        if (Nyuusann >= 100)
        {
            Nyuusann = 100; 
        }
        if (Nyuusann <= 0) 
        {
            Nyuusann = 0;
        }
            Slider nyuusann = GetComponent<Slider>();   
            nyuusann.value = Nyuusann; 
            //NullReferenceExceptionが六つ発生します。
    }
}

自分で試したこと

Nyuusannをfloatにする。
Sliderに変数以外を代入する(NullReferenceException)
思い出せる限りではこれですべてです。
もしかしたらほかにも試していたかもしれません。

0

3Answer

「【急募】」とまで敢えて付けて質問を投稿し、
回答者に早急な回答を求める割には
現状についてご自身で手を尽くし・調べて試行錯誤するより
「余談」について気にできる時間はあるのですね。

Slider nyuusann = GetComponent<Slider>();
この時点でGetComponent<Slider>();
コンポーネントを取得できている( = 参照がNull)ではないという
確証はありますか?
 
開発環境をどのように構築しているか存じ上げませんが
ステップ実行、ブレークポイントの設置等で確認してみましたか?
 
また、何もバージョン等の記載が無いので、
正確な回答を得るために
必要な情報が著しく欠如していると考えられます。
 
仮にご自身で確認できるようであれば
公式ドキュメントを参照し情報を追記することをお勧めします。
※以下のマニュアルは2023/02時点の情報です

2Like

Comments

  1. @watakabi

    Questioner

    貴重なご回答ありがとうございます。
    Debug.logで疑似的なことはしていたのですが、そのような機能を存じておらず試していませんでした。試してみます。
    以後は回答者の感情を考えた質問に心がけます。

  2. @watakabi

    Questioner

    バージョンは2022.3.7f1です。
    開発環境はvisual script(microsoft)です。

皆様の温かいご支援によって、無事バグは治りました。
ご協力、本当に感謝します。
まだ足りていないところも多いですが、今後も私の質問を見かけたら回答していただけると幸いです。
皆様、ありがとうございました。

2Like

StartメソッドとUpdateメソッドで、Slider nyuusannを再宣言しています。これにより、クラスのフィールドとして宣言されたnyuusannとは異なるローカル変数が作成されてしまい、クラスのフィールドnyuusannは初期化されずにnullのままだと思います。

  private Slider nyuusann; // 修正: フィールドの再宣言を削除し、アクセス修飾子を追加

    void Start() 
    {
        // クラスフィールドnyuusannを初期化
        nyuusann = GetComponent<Slider>();
        if (nyuusann == null)
        {
            Debug.LogError("Slider component not found!");
            return;
        }
        nyuusann.maxValue = Stamina;
    }

上記の通りに調整してみたら、どうですか?

1Like

Comments

  1. @watakabi

    Questioner

    貴重な回答ありがとうございます。
    その通りにしたらエラーが一つ減りました。
    回答を参考に試行錯誤してみます。

Your answer might help someone💌