Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Error al instanciar cuando compilo (C#)

Iniciado por unityFer, Junio 02, 2016, 09:13:50 PM

Tema anterior - Siguiente tema
Saludos, tengo un problema grave, me explico. 


Tengo enemigos que al morir explotan, en el editor de unity me va perfecto, cuando muere uno instancia la explosión, pero al compilar me tira error cuando mato a alguno y me pone lo siguiente:
 
ArgumentException: The thing you want to instantiate is null.
 
Tengo la explosión en una carpeta que se llama resources y la llamo en el script de la siguiente manera:
 
 
 

Buenas unityFer. Nunca se me ha dado el caso y no lo he probado, ya que aquí no tengo Unity instalado pero creo que tienes que decirle el tipo que tienes que cargar.
 
Resources.Load("ExplosionEnemigo", typeof(GameObject), ... blablablá) as GameOject;
 
Como no te cuesta nada probarlo pues ya me dirás como te ha ido.

Junio 02, 2016, 10:43:07 PM #2 Ultima modificación: Junio 02, 2016, 10:44:16 PM por unityFer
usé ésto y sigue igual, al compilar tira error al matar a uno.
 
el prefab está asignado en el inspector, no se de que otra forma puedo hacer que al impactar el proyectil salga una explosión, es que no tiene sentido.

GameObject ExplosionEnemigo = Instantiate(Resources.Load("ExplosionEnemigo", typeof (GameObject)), gameObject.transform.position, gameObject.transform.rotation) as GameObject;


Tal que así 



 
 

Pero si primero te destruyes a ti mismo con Destroy(this.gameobject)? Lógico que luego no pase nada.
 
Además, el instantiate tiene que ser con el tipo de objeto. Entiendo que el explosión enemigo tendrá algo más que un gameobject. Tendrá un script no?

Junio 02, 2016, 10:59:15 PM #4 Ultima modificación: Junio 02, 2016, 11:00:31 PM por unityFer
el prefab de la explosion cuenta con un script aparte, si


La cosa es la siguiente: Destruyo el proyectil, luego se instancia en el sitio una explosion, en unity funciona, y explota, el problema viene al compilar
 
 

Y repito:  Pero si primero te destruyes a ti mismo con Destroy(this.gameobject)? Lógico que luego no pase nada y no se ejecute nada más.
 
Si el script se llama explosionEnemy pues el instantiate debe ser con el script tipificado. Es decir explosionEnemy ee = instantiate(...) as explosionEnemy.

Junio 02, 2016, 11:08:52 PM #6 Ultima modificación: Junio 02, 2016, 11:16:18 PM por unityFer
Cambiandolo y poniendolo al final sigue dando error cuando hago Build del juego. no tengo ningun script a instanciar, o sea, el script que tiene la explosion es para eliminarla aparte cuando pasen x segundos.
 
 
 
 

No entiendo eso que dices. Creo que deberías hacer algún tutorial o más tutoriales, porqué hablamos idiomas diferentes

Junio 02, 2016, 11:17:21 PM #8 Ultima modificación: Junio 02, 2016, 11:18:05 PM por unityFer
a ver, cuando le doy al play funciona.


Cuando compilo todo el juego para hacer el ejecutable no. Y es ahi cuando me sale el error.
 
Disculpa mis modales, llevo menos de un año, soy nuevo en ésto.

Esto que contiene en el instantiate?
 
gameObject.transform.position, gameObject.transform.rotation
 
 

Las coordenadas donde se va a instanciar la explosión, con ésto instancio en el lugar donde se destruye el proyectil.

Si hace un debug, verás que te destruyes a ti mismo ya que haces un Destroy(this.gameObject) antes. Eso quiere decir que, todo el código que viene después no va a ejecutarse nunca.
 
Por qué te pasa en el build y no en el Play? El Destroy no es inmediato y en el play te funciona. Puedes utilizar DestroyInmediate pero no es recomendable por el garbage collector, aunque el tema es que te autodestruyes. No puedes hacer eso, por lógica. El destroy de ese gameobject tiene que hacerse desde otro gameobject.

Etiquetas: