Jump to content
Sign in to follow this  
Jesus Guillen

Error Script

Recommended Posts

Hola la consola me da este error aunque todo funciona perfectamente. El  script es simple,  matar a un enemigo saltando sobre el (tipo mario).

Error

NullReferenceException: Object reference not set to an instance of an object
HurtEnemy.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Script/HurtEnemy.cs:13)

Script

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

public class HurtEnemy : MonoBehaviour
{


    private void OnTriggerEnter(Collider other)
    {
        if(other.tag == "Enemy")
        {
            other.GetComponent<EnemyHealthManager>().TakeDamage();
        }
    }

}

 

Share this post


Link to post
Share on other sites

Hola, Jesus, quizás es por que el objeto colisiona con un objeto que tiene el Tag Enemy pero no el componente EnemyHealthManager.

Antes de llamar a TakeDamage deberías verificar si el collider contiene el componente.

Share this post


Link to post
Share on other sites

Vale por lo que me dices debería estar en el mismo objeto (Enemy) el triger y el componente EnemyHealthManager. Lo tengo puesto asi, y logicamente el otro script (HurtEnemy ) en los pies del player. Te refieres a eso?

 

Share this post


Link to post
Share on other sites

Me refiero a que no se está cumpliendo en todos los casos la condición de que se colisione con un objeto que tenga el Tag Enemy y el componente EnemyHealthManager. Por esta razón te recomiendo compruebes antes de usar la referencia a EnemyHealthManager.

private void OnTriggerEnter(Collider other)
{
  if(other.tag == "Enemy")
  {
    EnemyHealthManager com = other.GetComponent<EnemyHealthManager>();
    if(com != null) com.TakeDamage();
  }
}

 

Share this post


Link to post
Share on other sites

Pues tienes razon muchas gracias! por cierto una preguntilla rapida. Si yo quisiera que al entrar en un triger ocurra algo solo una vez , como por ejemplo reproducir un sonido y que si vuelve a entrar ya no se reproduzca, ¿que metodo utilizo para que sea solo una vez? es que no recuerdo y no se como buscarlo en el manual de unity. Gracias!

Share this post


Link to post
Share on other sites
10 minutes ago, Jesus Guillen said:

Pues tienes razon muchas gracias! por cierto una preguntilla rapida. Si yo quisiera que al entrar en un triger ocurra algo solo una vez , como por ejemplo reproducir un sonido y que si vuelve a entrar ya no se reproduzca, ¿que metodo utilizo para que sea solo una vez? es que no recuerdo y no se como buscarlo en el manual de unity. Gracias!

No existe un método para tal situación. 

Lo que podrías hacer es crear un variable booleana para identificar si la acción que deseas ya se ejecutó.

Share this post


Link to post
Share on other sites

Vale tienes razon muchas gracias. Hace poco estuve con unreal y hay unos nodos que consisten en eso y parece que di por hecho que en unity se podia hacer, pero no, la respuesta es la booleana. Mil Gracias!

Share this post


Link to post
Share on other sites
13 hours ago, Jesus Guillen said:

Vale tienes razon muchas gracias. Hace poco estuve con unreal y hay unos nodos que consisten en eso y parece que di por hecho que en unity se podia hacer, pero no, la respuesta es la booleana. Mil Gracias!

Los nodos a los que te refieres lo que hacen es emular a las acciones, variables y métodos del lenguaje de programación en cuestión. Para poder ejecutar algo una sola vez, una de las cosas que puedes hacer es como dice francoe1, establecer una variable "bool" que se ponga en "true" o "false" cuando se produzca la entrada en el trigger, y que debido al cambio de valor, ya no se pueda ejecutar con una condición. Te recomiendo que "escapes" del método de programación a base de nodos si quieres aprender a programar, por que así podrás tomar el control absoluto de lo que quieras hacer.

Un saludo!

  • Like 1

Share this post


Link to post
Share on other sites

Si Megadok estoy de acuerdo contigo, empece a usar unreal por ver un poco en engine por si en algun momento de mi estado laboral me pudieran pedir conocimientos, pero la verdad me defiendo mejor con unity incluso sin los nodos,  osea entiendo mejor el funcionamiento desde dentro como dices y es la mejor forma de aprender. Gracias a ambos.

Share this post


Link to post
Share on other sites

Por cierto por cerrar este tema y no abrir otro, queria preguntaros otra cosa.

Estoy haciendo un juego de plataformas y la cuestion del menu y el guardado es muy simple. Es lo tipico de para desbloquear el siguiente nivel tienes que pasar el anterior. En el menu solo hay un boton de play y de salir. En caso de que inicies el juego y vuelvas al menu te dara la opcion de un tercer boton que es el de continuar.

Ahora bien el problema me surge al llamar una funcion de un script al de mi menu. Dicha funcion lo que hace es resetear la escena cada vez que el jugador muere, ya que si inicio la primera vez el juego todo va bien, pero si vuelvo al menu o voy desde el boton continuar, el jugador al morir se queda en la escena y nunca reinicia.  👇

 

image.png

 

Edited by Jesus Guillen

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...