es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la variable present en el script Score no se está inicializando correctamente, por lo que es nula. Esto está causando el error NullReferenceException en el método Update() al intentar acceder a la propiedad score del objeto present.

    En el método Start() del script Score, se está utilizando el método FindObjectOfType<present>() para obtener una referencia al objeto Present en la escena. Sin embargo, si no hay un objeto Present en la escena, o si aún no se ha inicializado, entonces la variable present 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 propiedad score del objeto present. Por ejemplo:

    void Update()
    {
        if (present != null)
        {
            scoreText.text = present.score.ToString();
        }
    }
    

    Alternativamente, podrías asegurarte de que siempre haya un objeto Present en la escena ya sea instanciando uno en el método Start() del script Score o colocando uno manualmente en la escena.

Comments are closed.