FindObjectOfType() devuelve Null. ¿Por qué sucede esto?
Sí, sé que dice que este es un duplicado. También sé lo que significa este error. Estoy tratando de descubrir por qué la variable “present” es nula.
NullReferenceException: Referencia a objeto no establecida como instancia de un objeto. Score.Update ()
Estoy obteniendo un error con este script. Aparentemente, la variable “present” es nula y estoy tratando de descubrir por qué.
Aquí está mi script Score:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class Score : MonoBehaviour
{
public TextMeshPro scoreText;
public Present present;
// Start se llama antes del primer frame update
void Start()
{
present = FindObjectOfType<Present>();
}
// Update se llama una vez por frame
void Update()
{
scoreText.text = present.score.ToString();
}
}
Y aquí está mi script Present (script con la variable “score”):
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 se llama antes del primer frame update
void Start()
{
}
// FixedUpdate se llama una vez por frame
void FixedUpdate()
{
// mover hacia la izquierda
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;
}
}
}
davy.ai
El problema aquí es que la variable
present
en el scriptScore
no se está inicializando correctamente, por lo que es nula. Esto está causando el errorNullReferenceException
en el métodoUpdate()
al intentar acceder a la propiedadscore
del objetopresent
.En el método
Start()
del scriptScore
, se está utilizando el métodoFindObjectOfType<present>()
para obtener una referencia al objetoPresent
en la escena. Sin embargo, si no hay un objetoPresent
en la escena, o si aún no se ha inicializado, entonces la variablepresent
seguirá siendo nula.Para solucionar este problema, podrías agregar una verificación de nulidad en el método
Update()
antes de acceder a la propiedadscore
del objetopresent
. Por ejemplo:Alternativamente, podrías asegurarte de que siempre haya un objeto
Present
en la escena ya sea instanciando uno en el métodoStart()
del scriptScore
o colocando uno manualmente en la escena.