Jesus Guillen 2 Report post Posted September 25, 2020 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
francoe1 536 Report post Posted September 25, 2020 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
Jesus Guillen 2 Report post Posted September 25, 2020 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
francoe1 536 Report post Posted September 25, 2020 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
Jesus Guillen 2 Report post Posted September 25, 2020 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
francoe1 536 Report post Posted September 25, 2020 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
Jesus Guillen 2 Report post Posted September 25, 2020 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
Megadok 11 Report post Posted September 26, 2020 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! 1 Share this post Link to post Share on other sites
Jesus Guillen 2 Report post Posted September 29, 2020 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
Jesus Guillen 2 Report post Posted September 29, 2020 (edited) 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. 👇 Edited September 29, 2020 by Jesus Guillen Share this post Link to post Share on other sites