Noticias

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

(RESUELTO) GAME OVER desde el principio

Iniciado por Miguel2D, Abril 16, 2016, 02:37:47 AM

Tema anterior - Siguiente tema
Abril 16, 2016, 02:37:47 AM Ultima modificación: Abril 17, 2016, 01:34:42 PM por Miguel2D
Buenas,Tengo un problema al exportar para Android. El juego está basado en un tutorial y se juega perfectamente en PC, mientras que en Android carga el juego perfectamente (el menú) pero cuando pulso para jugar se abre la escena de la fase e inmediatamente me salta la pantalla de 'Game Over'.  En el segundo que puedo ver de la escena mientras salta el 'Game Over' no veo al personaje en la pantalla, veo todos los demás elementos pero el personaje ha desaparecido.He probado tocando el boxCollider y la detección de colisión en continuo en vez de discreto . Pero nada. (móvil de última generación)¿Alguna idea?

Pues con esta poca info nada de nada.

El tutorial es el de "Corre, Corre" y básicamente he seguido los pasos obviando algunos detalles (sonido, por ahora). El resultado que obtengo es practicamente el mismo, pero en android no aparece el personaje.


Abril 16, 2016, 10:22:10 PM #4 Ultima modificación: Abril 16, 2016, 10:43:23 PM por Miguel2D
Uf, hay varios scripts en la escena.La del PJ sería:
using UnityEngine;
using System.Collections;

public class ControladorPersonaje : MonoBehaviour {

public float fuerzaSalto = 100f;

private bool enSuelo = true;
public Transform comprobadorSuelo;
private float comprobadorRadio = 0.4f;
public LayerMask mascaraSuelo;

private bool dobleSalto = false;

private Animator animator;

private bool corriendo = false;
public float velocidad = 1f;

void Awake(){
   animator = GetComponent<Animator>();
}

// Use this for initialization
void Start () {

}

void FixedUpdate(){
   if(corriendo){
      GetComponent<Rigidbody2D>().velocity = new Vector2(velocidad, GetComponent<Rigidbody2D>().velocity.y);
   }
   animator.SetFloat("VelX", GetComponent<Rigidbody2D>().velocity.x);
   enSuelo = Physics2D.OverlapCircle(comprobadorSuelo.position, comprobadorRadio, mascaraSuelo);
   animator.SetBool("isGrounded", enSuelo);
   if(enSuelo){
      dobleSalto = false;
   }
}

// Update is called once per frame
//void Update () {
   //if(Input.GetMouseButtonDown(0)){
void OnGUI() {
   if (GUILayout.Button("Press Me")){
      if(corriendo){
         // Hacemos que salte si puede saltar
         if(enSuelo || !dobleSalto){
            GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, fuerzaSalto);
            //rigidbody2D.AddForce(new Vector2(0, fuerzaSalto));
            if(!dobleSalto && !enSuelo){
               dobleSalto = true;
            }
         }
      }else{
         corriendo = true;
         NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer");
      }
   }
}
}
después está la de la cámara, la de los items, la que guarda el estado del juego, los destructores... EDITO: La cámra tiene un scrip que activa el Game Over:
using UnityEngine;
using System.Collections;

public class ActivarGameOver : MonoBehaviour {

public GameObject camaraGameOver;

// Use this for initialization
void Start () {
   NotificationCenter.DefaultCenter().AddObserver(this, "PersonajeHaMuerto");
}

void PersonajeHaMuerto(Notification notificacion){
   camaraGameOver.SetActive(true);
}

// Update is called once per frame
void Update () {

}
}
 

El fallo era el bug de Unity con la interpolación de movimientos en la rotación.interpolation -> Euler Angles (Quartenion Aproximation)


la conversion entre euler angles y quaternions tiene limitaciones conocidas... no son bugs, es simplemente que los angulos 3D tienen dificultades para representar lo que está en el quaternion, incluyendo las aproximaciones de los floats

Etiquetas: