Noticias

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

Problema con los bichos al cargar nivel ( Resuelto)

Iniciado por ramunda, Septiembre 08, 2015, 01:33:33 PM

Tema anterior - Siguiente tema
Septiembre 08, 2015, 01:33:33 PM Ultima modificación: Septiembre 08, 2015, 08:32:24 PM por ramunda
Hola buenas tardes, me esta pasando una cosa rara que no me habia pasado antes y no se por que...Estoy en nivel 1, paso a nivel 2, y los bichos no se mueven,Si cargo la escena individualmente va perfecto pero si llego a ella desde el otro nivel estaticos. Uso este script muyy simple para pasar de nivel: 
using UnityEngine;
using System.Collections;

public class cambiodelevel : MonoBehaviour {

//public static function DontDestroyOnLoad( Object target  ): void;
public  GameObject player;
void OnTriggerEnter (){
 Application.LoadLevel ("Gluta");
}
void Awake() {
DontDestroyOnLoad(transform.gameObject);
}
}
Alguna idea?.Gracias 

Con tan poca info, yo diría que los parámetros que mueven "los bichos" están reseteados. Porqué han llegado a 0 o no se han inicializado. 

Septiembre 08, 2015, 02:33:25 PM #2 Ultima modificación: Septiembre 08, 2015, 02:51:48 PM por ramunda
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="22116" data-ipsquote-contentcommentid="108509 date=1441715271]Con tan poca info, yo diría que los parámetros que mueven "los bichos" están reseteados. Porqué han llegado a 0 o no se han inicializado. [/quote]Gracias por la respuesta pero lo raro es que si cargo el nivel individualmente osea load scene funcionan bien, que podria provocar que se reseteen?Tiene que ser algo de el loadlevel supongo que les afecta ?Vale e encontrado el problema ahora tengo que solucionarlo:distance = Vector3.Distance(player.transform.position,gameObject.transform.position);El gameobject se destruie al cargar la escena por eso no rulam los bichos....pero porque se destruye? 

Pero porque pones dontdestroyonload de transform.gameobject y no solo this o this.gameobject

Septiembre 08, 2015, 03:35:49 PM #4 Ultima modificación: Septiembre 08, 2015, 03:39:08 PM por Edgargaza
[quote author=ramunda date=1441715605" data-ipsquote="" data-cite="ramunda">Gracias por la respuesta pero lo raro es que si cargo el nivel individualmente osea load scene funcionan bien, que podria provocar que se reseteen?Tiene que ser algo de el loadlevel supongo que les afecta ?Vale e encontrado el problema ahora tengo que solucionarlo:distance = Vector3.Distance(player.transform.position,gameObject.transform.position);El gameobject se destruie al cargar la escena por eso no rulam los bichos....pero porque se destruye? [/quote]Al cambiar de nivel, todo se resetea. Si en el nivel 1 hay un cubo verde con un script añadido (por ejemplo, CuboVerde.cs), y en el nivel 2 hay una esfera roja sin script, todo lo del nivel 1 se destruye (incluyendo los scripts), y se carga todo lo 'predeterminado' del nivel 2 (la esfera roja sin ningún script añadido).Para que un objeto no se destruya al cambiar de escena, debes crear un script nuevo. Por ejemplo, DontDestroyOnChangeScene.cs:• DontDestroyOnChangeScene.cs:
								

Septiembre 08, 2015, 04:16:42 PM #5 Ultima modificación: Septiembre 08, 2015, 04:29:12 PM por ramunda
Vale , muchas gracias de nuevoHe echo lo que me comentas le he puesto al bicho en cuestion el script.Pero la cosa es la siguiente, que el bicho ya esta en la escena 2, lo cual no se carga de la escena 1Y revindico si pruebo la escena cargandola sola funciona pero al venir de la 1 se casca me da este error (por eso no taca)MissingReferenceException: The object of type 'GameObject' has been destro*** but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object. el GameObject es el bicho.Aqui te dejo el script de el bicho veras lo que digo.
using UnityEngine;
using System.Collections;
public class skellyattackspidergrande : MonoBehaviour {
public EnemyType myEnemyType;
private GameObject player;
private float distance;
public int damage =(10);
private PlayerInfo character;
private Animation myAnimation;
private float timer=0;
private bool shotdamage=true;
//public class BloodSplat;
//public static BloodSplat;

   void Start () {
   player = gamecontroller.Instance.GetPlayer ();
   character = player.GetComponent<PlayerInfo>();
   myAnimation = gameObject.GetComponent<Animation>();
   }
   
   // Update is called once per frame
   void Update () {
   if (!shotdamage) {
      timer += Time.deltaTime;
      if(timer >= 3) {
         shotdamage = true;
         timer = 0;
      }
   }



      

   distance = Vector3.Distance(player.transform.position,gameObject.transform.position);
      
      if (distance <= 3) {
      myAnimation.CrossFadeQueued("walk", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("attack");
      if (shotdamage) {
         shotdamage = false;
         character.ApplyDamage (damage);
         player.GetComponent<BloodSplat>().enabled = true;
      }
      }
            
      else if (distance < 45 && distance > 3.0f) {
      myAnimation.CrossFadeQueued("attack", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("walk");
      gameObject.transform.LookAt(player.transform.position);
      transform.position = Vector3.MoveTowards(transform.position, player.transform.position, 0.15f);
      character.playerInCombat(true);
         
      }   
      else
      {
      //GetComponent<FollowPath>().enabled = true;
      myAnimation.CrossFadeQueued("walk", 0.3f, QueueMode.PlayNow);
      myAnimation.CrossFade("idle");
      //player.GetComponent<BloodSplat>().enabled = false;
      character.playerInCombat(true);
      }
   }
   
   
}
 creo que lo que casaca es esta linea.Aunque nose porque....
myAnimation = gameObject.GetComponent<Animation>();
 o vaya creo que no es eso creo que no encuentra al Jugador al player , creo que es eso oea que se esta destruyendo el jugador al pasar de nivel y el bichaco no encuantra a este....ufff que follon!!! 

[quote author=ramunda date=1441721802" data-ipsquote="" data-cite="ramunda">o vaya creo que no es eso creo que no encuentra al Jugador al player , creo que es eso oea que se esta destruyendo el jugador al pasar de nivel y el bichaco no encuantra a este....:(

Septiembre 08, 2015, 04:58:36 PM #7 Ultima modificación: Septiembre 08, 2015, 05:00:49 PM por ramunda
[quote author=Edgargaza" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="22116" data-ipsquote-contentcommentid="108541">Exacto. El gameObject del que intentas coger el componente Animation no existe, es nulo, se destruye. ¿Dices que ese gameObject no lo cargas desde la primera escena, si no que ya existe?[/quote]Asi es , es una araña que ya esta puesta en el nivel 2, y mas bichos que les pasa lo mismo que a ella, ya estan en el  nivel 2, no vienen de el nivel 1.eso es lo raro que se destruya eso si realmente ya esta alli!!!, de echo es un prefab, simplemente lo arrastro y le digo quien es el player Esto es un expediente XXXIdeas?¿:)

Septiembre 08, 2015, 05:36:49 PM #8 Ultima modificación: Septiembre 08, 2015, 05:47:39 PM por Edgargaza
[quote author=ramunda date=1441724316" data-ipsquote="" data-cite="ramunda">Asi es , es una araña que ya esta puesta en el nivel 2, y mas bichos que les pasa lo mismo que a ella, ya estan en el  nivel 2, no vienen de el nivel 1.eso es lo raro que se destruya eso si realmente ya esta alli!!!, de echo es un prefab, simplemente lo arrastro y le digo quien es el player Esto es un expediente XXXIdeas?¿ [/quote]Creo que ya sé lo que es, no se carga el Player:
?)
character = player.GetComponent<PlayerInfo>();
myAnimation = gameObject.GetComponent<Animation>();
}
Si gamecontroller es una clase, asegúrate de que accede a ella. Pon la variable GameObject player como pública, y fíjate si se carga el objeto o no.Yo lo que haría sería hacer el método getPlayer() del gamecontroller estático, así podrías acceder sin necesidad del Instance. Quizá sea eso, no estoy muy seguro...

Solucionado(Gracias Leo), un colega me ha dado una idea i a resultado funcionar... Para posibles lecturas de este post lo que he echo es lo sieguiente.void Start () {
        player = GameObject.Find ("Jugador");
        character = player.GetComponent<PlayerInfo>();
        myAnimation = gameObject.GetComponent<Animation>();
        }Cambiar la manera de como busca al player indicándolo como he puesto arriba.Asi funciona bien.Edgargaza muchas muchas gracias por el apoyo . no estabas desencaminado no.Gracias también IRoob por la ayuda.Saludos 

[quote author=ramunda date=1441737071" data-ipsquote="" data-cite="ramunda">Solucionado(Gracias Leo), un colega me ha dado una idea i a resultado funcionar... Para posibles lecturas de este post lo que he echo es lo sieguiente.void Start () {
        player = GameObject.Find ("Jugador");
        character = player.GetComponent<PlayerInfo>();
        myAnimation = gameObject.GetComponent<Animation>();
        }Cambiar la manera de como busca al player indicándolo como he puesto arriba.Asi funciona bien.Edgargaza muchas muchas gracias por el apoyo . no estabas desencaminado no.Gracias también IRoob por la ayuda.Saludos [/quote]Ahí está :P

[quote author=Edgargaza" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="22116" data-ipsquote-contentcommentid="108679">Ahí está  El player era nulo, ya sabía yo que por ahí iba ajjajaMe alegro de que lo hayas resuelto![/quote]:)

Etiquetas: