FindObjectOfType<Present>() Returns 空。为什么是这样?

FindObjectOfType<Present>() Returns Null. Why is this?

(是的,我知道它说这是重复的。我也知道这个错误是什么意思。我想弄清楚为什么当前变量为空)

NullReferenceException:对象引用未设置到对象的实例。 Score.Update()

此脚本出错。显然当前变量为空,我正在尝试找出原因。

这是我的乐谱脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class Score : MonoBehaviour
{
    public TextMeshPro scoreText;
    public Present present;

    // Start is called before the first frame update
    void Start()
    {
        present = FindObjectOfType<Present>();
    }

    // Update is called once per frame
    void Update()
    {
        scoreText.text = present.score.ToString();
    }
}

这是我的 Present 脚本(带有分数变量的脚本):

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

public class Present : MonoBehaviour
{
    public Vector2 velocity;
    private double deletionZone = 15;
    public int score = 0;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        // move to the left
        transform.Translate(velocity * Time.fixedDeltaTime);
        if (transform.position.x <= -deletionZone)
        {
            Destroy(gameObject);
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player")
        {
            Destroy(gameObject);
            score += 10;
        }
    }
}

我认为这是因为您用大写 P 命名 Present 字段,它应该是小写 - present。 所以public present present;

我前几天修复了这个问题,但是这里没有更新。

显然 FindObjectOfType() 实际上没有 return null,我想我在调试和发布之前做了假设。

无论如何,


而不是使用

public TextMeshPro scoreText;

这是我应该做的:

public TextMeshProUGUI scoreText;

本来可以为我的 game jam 项目节省一天的时间:|