Noticias

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

RayCast

Iniciado por Siam, Septiembre 17, 2017, 06:18:19 PM

Tema anterior - Siguiente tema
Estoy intetando crear un raycast justo a los pies de un player2D para controlar el salto y doble salto. He creado un gameobject vacio hijo del player y lo he posicionado en los pies. Busco el GO hijo y uso su posicion para crear el rayCast.
 
El problema es que al dibujar la linea, esta es horizontal y super larga. Me imagino que estare pasando mal los parametros al raycast. 
 

public class playerController : MonoBehaviour
{
  private Transform rC1;
  void Start ()
  {
          rC1 = transform.GetChild (2).transform;
  }
  void FixedUpdate ()
  {
    if (Physics2D.Raycast (rC1.position, -rC1.up, 0.2f))
    {
    Debug.DrawLine (rC1.position, -rC1.up,Color.white,0.2f);
    Debug.Log ("Suelo");
    }   
  }
}

 
 

He probado esto otro
 

void FixedUpdate ()
{
   if (Physics2D.Raycast (rC1.position, Vector2.down, 1f))
   {
      numSaltos=0;
      Debug.Log ("Suelo " + numSaltos);
   }   
}
void Update ()
{
   if (Input.GetKey(GameManager.GM.jump) && numSaltos<3)
   {
      numSaltos++;
      animacion.SetBool ("espalda", false);
      GetComponent<Rigidbody2D> ().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x , alturaSalto );
        }
     }
     

 
Pero numSaltos siempre es 0. Se supone que el raycast tiene 1 de longuitud

En tu primer script usas -rC1.up para la dirección del ray, eso va depender como este posicionado el GameObject hijo dentro del padre; es decir, lo q para el hijo es abajo talvez para el padre es derecha o que se yo, es una posibilidad, podrías usar Vector3.down.
 
En el segundo ejemplo el ray esta siempre activo por lo tanto numSaltos siempre va ser cero aunque le pongas numSaltos++ en el update, porque aunque este codigo le adicione una unidad al oprimir el salto inmediatamente al siguiente frame se hace cero por el raycast.

Hola Siam, para agregar a lo que dijo @Caesar que me parece es lo correcto:
 
* no es necesario usar raycast ni ningun cast en fixedUpdate solo porque tenga la palabra "Physics" adelante. Todos los cast son calculos matematicos (no hay rigidbodies involucrados) y se usan en Update.
 
* crear un hijo para que este le pase el punto al principio de un ray es un desperdicio, es mejor y mas preciso controlar por codigo el punto por lo que te dijeron que dependes de la orientacion del hijo, etc, ademas de que te ahorras un gameObject.
 
* Siempre que estas con los raycast asegurate de las Layers que interactuan entre si, el objeto que hace de colisionador o creador de ray es el objeto que tiene el script con el raycast.
 
* Si lo que vas a verificar el la condicion principal no hagas el juego del telefono descompuesto verificando cosas que deberian pasar con la condicion inicial (Ej dos que subiste). SI queres verificar si el ray colisiona hace : if (ray se da) print("se dio") fijate que el raycast anda supuestamente y te ""indica"" que no.

Viendo las respuestas he hecho esto
 

private LayerMask groundLayer;
void Start ()
{
groundLayer=256;
}
void Update ()
{
  RaycastHit2D hit = Physics2D.Raycast (transform.position, Vector2.down, 0.6f, groundLayer.value);
  //Debug.DrawRay(transform.position, Vector2.down, Color.green);
  if (hit.collider != null)
  {
    numSaltos = 0;
    Debug.Log ("Suelo " + numSaltos);
  }
  if (Input.GetKey(GameManager.GM.jump) && numSaltos<3)
  {
    numSaltos++;
    animacion.SetBool ("espalda", false);
    GetComponent<Rigidbody2D> ().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x , alturaSalto );
  }
}

 
Lo unico que al hacer el 1º salto numSaltos deberia sumar uno (numSaltos=1) pero me suma dos, por separado es decir numSaltos = 1 y luego numSaltos =2

Cita de: Siam date=1505732747Lo unico que al hacer el 1º salto numSaltos deberia sumar uno (numSaltos=1) pero me suma dos, por separado es decir numSaltos = 1 y luego numSaltos =2
   


Es porque tenes un getkey y no un getkeydown

@lightbug Tienes razón, ya me estaba volviendo loco

Etiquetas: