No funciona script para diferentes instancias de un mismo objeto Unity 2d
Pues empiezo a "molestaros" con un tema que no me deja avanzar en el videojuego que estoy creando. En resumen, lo que me pasa es que he creado un script para controlar la vida y las animaciones del enemigo. La cuestión es que el script funciona correctamente cuando sólo hay una instancia del prefab que he creado, pero si arrastro otro más a la escena, la cosa se pone fea.
Os explico con más detalle:
El mensaje que me sale en consola es el siguiente: "MissingReferenceException: The object of type 'Animator' has been destroyed but you are still trying to access it.Your script should either check if it is null or you should not destroy the object."
Esto sucede cuando hay 2 instancias o más del mismo prefab. A mi entender (que es bastante limitado puesto que soy un novato con pedigree :lol: ), una vez que destruyo el primer prefab, es como si destruyera todos los componentes en sus copias, con lo cual no se puede acceder, en este caso, al componente Animator del resto.
Necesito que me echéis un cabecillo para solucionar esto antes de que me vuelva loco. He intentado mil cosas pero no doy con la tecla.
Si necesitáis (que imagino que sí) que os adjunte scripts u otra cosa, decídmelo y cumpliré vuestros deseos.
Muchas gracias de antemano!!
Falta el componente Animator que ha sido destruido
Según tu descripción, el error se produce porque estás tratando de acceder a un componente Animator que ha sido destruido. Esto puede suceder si estás utilizando el método Destroy() para destruir el prefab original. Cuando destruyes un prefab, todos sus componentes también son destruidos.
Para solucionar este problema, puedes hacer una de las siguientes opciones:
No destruir el prefab original. Esto evitará que los componentes del prefab sean destruidos.
Crear una nueva instancia del prefab original cada vez que necesites un nuevo enemigo. Esto asegurará que cada enemigo tenga su propio componente Animator.
Almacenar una referencia al componente Animator en el script del enemigo. Esto te permitirá acceder al componente incluso después de que el prefab haya sido destruido.
Si optas por no destruir el prefab original, puedes usar el método GetComponent() para acceder al componente Animator cada vez que lo necesites. Por ejemplo:
Código:
public class EnemyScript : MonoBehaviour
{
private Animator animator;
void Awake()
{
animator = GetComponent<Animator>();
}
void Update()
{
animator.SetFloat("Health", health);
}
}
Si optas por crear una nueva instancia del prefab original cada vez que necesites un nuevo enemigo, puedes usar el método Instantiate() para crear una nueva instancia. Por ejemplo:
Código:
public class EnemySpawner : MonoBehaviour
{
void Start()
{
// Create a new instance of the enemy prefab
Enemy enemy = Instantiate(enemyPrefab);
// Add the enemy to the scene
GameObject.AddComponent(enemy);
}
}
A ver si esto te ayuda a solucionar tu problema.
Un saludo.