En este momento estás viendo Referencia de objeto de Unity no establecida en una instancia de un objeto después de SetActive false

 – Unity

Referencia de objeto de Unity no establecida en una instancia de un objeto después de SetActive false – Unity

Referencia de objeto de Unity no establecida en una instancia de un objeto después de SetActive false

– UnityAssets3Free

hola , por aqui juansito y aqui os traigo
nueva pregunta

Tengo un objeto de juego llamado comenzando que contiene un cuadrado y texto heredado

El cuadrado sirve como un botón con el texto «Presione el botón de inicio». El usuario presionará el botón de inicio (asignado a la barra espaciadora). Esto establecerá el comenzando gameObject a inactivo. El código es el siguiente:

void Update()

if (Input.GetKeyDown(KeyCode.Space))

  if (CharacterController.started == false)
  
      CharacterController.started = true;
      gameObject.SetActive(false);
  
  else if (CharacterController.started == true)
  
      CharacterController.started = false;
      gameObject.SetActive(true);
  


CharacterController.started es un booleano para otro gameObject.

Entiendo que GameObject.find() no funciona si el gameObject se ha configurado como inactivo. Traté de encontrar el GameObject del script CharacterController así:

void Update()
    

        if (started)
        
            if (Input.GetKeyDown(KeyCode.Space))
            
                starting = GameObject.Find("Starting");
                starting.SetActive(true);
            
        
 

Eso no funcionó y da el error:

NullReferenceException: Referencia de objeto no definida para una instancia de un objeto CharacterController.Update() (en Assets/CharacterController.cs:33)

Soy nuevo en Unity. ¿Cómo obtengo el GameObject inicial y lo configuro como activo?

2 respuestas 2

Básicamente respondió a su pregunta, el GameObject «Inicial» está inactivo, por lo que no lo encontrará. Intente hacer referencia a él al comienzo de su juego en CharacterController, así:

public GameObject startingObject;
private void Start()
startingObject = GameObject.Find("Starting"); //Find it here, or drag it into the hierarchy

luego elimine esta línea de Update():

 starting = GameObject.Find("Starting");

ya que es una mala práctica usar GameObject.Find() dentro del método Update de todos modos. También es preferible hacer referencia a los Componentes a la jerarquía que usar GameObject.Find(«») si es posible, por supuesto, pero ambas soluciones deberían funcionar bien

Intente declararlo manualmente en lugar de GameObject.Find().

ex:

public GameObject starting;

luego úsalo en Actualizar()

void Update()


    if (started)
    
        if (Input.GetKeyDown(KeyCode.Space))
             
            starting.SetActive(true);
        
    

Agregue la secuencia de comandos al objeto deseado y arrastre y suelte el campo Comenzar en la secuencia de comandos. Esto es mejor cuando ya tiene los objetos en escenas o para instanciar un prefabricado desde el almacenamiento.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,espero que te funcione

Deja una respuesta