【解決方法】このエラーが発生しました:


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

public class player_good : MonoBehaviour
{
    public float speed ;
    public float JumpForce;
    Rigidbody2D rb;
    bool OnGround;
    private Animator anim;
    SpriteRenderer sprite;
    [SerializeField] private Text counter;
    [SerializeField]private AudioSource jumpSoundeffect;
    [SerializeField]private AudioSource collectSoundeffect;
    [SerializeField]private AudioSource endSoundeffect;
    private int count=0;
    // Start is called before the first frame update
    void Start()
    {
        rb=GetComponent<Rigidbody2D>();
        OnGround=true;
        sprite = GetComponent<SpriteRenderer>();
        anim=GetComponent<Animator>();
    }
    // Update is called once per frame
    void Update()
    {
        float player =Input.GetAxis("Horizontal");
        transform.position += new Vector3(player*speed,0,0);
        if (Input.GetKeyDown(KeyCode.Space)&&OnGround)
        {
             jumpSoundeffect.Play();
             rb.AddForce(new Vector2(0,JumpForce));
             anim.SetTrigger("jump");
        }
        //flipping
        if (player>0)
        {
            sprite.flipX=false;
        }
        else if (player<0)
        {
            sprite.flipX=true;
        }
        if(player!=0)
        {
           anim.SetBool("is wolking",true);
        }
        else
        {
           anim.SetBool("is wolking",false);
        }
    }
    private void OnCollisionEnter2D(Collision2D collision)
    {
       if (collision.gameObject.tag=="Ground")
       {
         OnGround=true;
       }
       if (collision.gameObject.CompareTag("end"))
       {
         endSoundeffect.Play();
         SceneManager.LoadScene("SampleScene");
       }

      
    }
    private void OnCollisionExit2D(Collision2D collision)
    {
       if (collision.gameObject.tag=="Ground")
       {
          OnGround=false;
       }
    }
   	private void OnTriggerEnter2D (Collider2D collision)
   	{
   	    if(collision.gameObject.CompareTag("fruit"))
   	    {
   	         collectSoundeffect.Play();
   	       	 count++;
   	    	 Destroy(collision.gameObject);
   	    	 counter.text="Fruits"+count;

   	    }
   	}

}

私が試したこと:

I got this error :
ArgumentNullException: Value cannot be null.
 Parameter name: source 
UnityEngine.AudioSource.Play () (at <6d9b197a0b824e1d8ee671e1e014c4d1>:0) player_good.Update () (at Assets/player_good.cs:35)

解決策 1

これは、私たちが最もよく聞かれる問題の 1 つであり、私たちが最も答えられない問題でもありますが、あなた自身が最も答えられる問題です。

エラーの意味を説明しましょう。変数、プロパティ、またはメソッドの戻り値を使用しようとしましたが、null が含まれています。これは、変数にクラスのインスタンスがないことを意味します。
ポケットのようなものです。シャツにポケットがあり、ペンを入れるのに使用します。 ポケットに手を入れてペンがないことに気づいたら、紙に自分の名前を書くことはできません。 空のポケットはヌル値 (ここにはペンがありません!) を与えているので、ペンを取り出したら通常行うことは何もできません。 なぜそれは空ですか? それが問題です – 今朝家を出るときにペンを手に取るのを忘れたのかもしれませんし、昨夜脱いだときに昨日のシャツのポケットにペンを忘れたのかもしれません.

私たちはそこにいなかったのでわかりません。さらに重要なことに、あなたのシャツも見えず、ましてやポケットに何が入っているかもわかりません!

コンピューターに戻ると、あなたは同じことを何らかの形で行っています。そして、あなたのコードを見ることはできません。
しかし、それは可能です。ここでは、Visual Studio が役に立ちます。 デバッガーでプログラムを実行し、失敗すると、問題が見つかった行が表示されます。 次に、そのさまざまな部分を調べて、どの値が null であるかを確認し、コードを振り返ってその理由を見つけることができます。 したがって、エラー行を含むメソッドの先頭にブレークポイントを置き、プログラムを最初からもう一度実行します。 今回は、デバッガーはエラーが発生する前に停止し、コードをステップ実行して値を確認することで、何が起こっているかを調べることができます。

しかし、それはできません – 私たちはあなたのコードを持っていません。コードを持っていたとしても、それをどのように使用するかわかりません。あなたのデータもありません。 試してみて、どれだけの情報が得られるか見てみましょう!

コメント

タイトルとURLをコピーしました