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💌