Subir y bajar escaleras en Unity - Tutorial en español

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ธ.ค. 2024

ความคิดเห็น • 24

  • @ondeanda
    @ondeanda 3 ปีที่แล้ว +1

    Joder!!(perdon) llevo dos días vuelto loco con tutos de escaleras, ojalá me sirva cuando lo vea. Gracias Paco

    • @PacoBarba
      @PacoBarba  3 ปีที่แล้ว +1

      Lo he querido hacer por que los que hay en YT o no te explican todo o fallan por alguna parte, se me ha hecho un poco largo pero si lo ves con calma seguro que te sirve. El próximo capítulo será para mejorar el tema de las escaleras y espero que sea mas corto que este. :D

  • @morganahusky85
    @morganahusky85 3 ปีที่แล้ว +2

    gracias😃.esperaba este capitulo.te agradezco por el tiempo dedicado .sigue el éxito te lo estás ganando a pulso.

    • @PacoBarba
      @PacoBarba  3 ปีที่แล้ว +1

      Muchas gracias, poco a poco iré explicando cosas que iré incorporando al videojuego ( si el tiempo me lo permite, que tengo mis propios videojuegos bastante parados ). Espero que te sirva.

  • @jackpelon9852
    @jackpelon9852 ปีที่แล้ว +2

    Hola amigo @Paco, regrese nuevamente por aquí, ya tengo las escaleras todo funciona bien y también la de "Escaleras mejoradas", de hecho esta tal cual y funcionando. El problema esta en que deseo implementar otro tipo de escaleras mas al juego, en el cual la escalera esta para que el Player este de perfil y lance una animación de subir escaleras de perfil o de costado y a parte de la que ya tiene en la que esta frente a la escalera y muestra la espalda al subir la escalera y no se como hacerlo de momento ya que podría repetir el código también para este nuevo tipo de escalera pero me late que se puede usar los 2 tipos de escaleras con el mismo código , no se tal vez agregando un tag "EscaleraPerfil" y aparte de tener la capa o layerMask "Escalera"... dame una pista porfa amigo @Paco... o También seria una buena idea para tu próximo tutorial... 😍😍😍👍👍👍👍👍👍👍

    • @PacoBarba
      @PacoBarba  ปีที่แล้ว +1

      Hola Jack, la verdad es que vas bien encaminado, puedes hacerlo exactamente igual, pero si que tendrías que añadir un tag a la escalera para saber si tienes que subir pegado a la izquierda o la derecha, de esta forma sabes donde colocar el sprite, solo con eso y el mismo código que para las otras escaleras debería bastar, pero claro, haciendo otro solo para estas laterales

  • @leondemedisis9312
    @leondemedisis9312 3 ปีที่แล้ว +1

    Muchas gracias por seguir con los tutoriales

    • @PacoBarba
      @PacoBarba  3 ปีที่แล้ว +1

      Muchas gracias León. Últimamente no encuentro tiempo ni para ver los comentarios. A ver si puedo sacar esta semana la segunda parte con la mejora de las escaleras.

  • @arcangelrs
    @arcangelrs 2 ปีที่แล้ว

    Ola Sr Barba, gracias por su gran trabajo, tengo algunos aportes:
    en el método entroEscalera():
    private void entroEscalera(GameObject escalera)
    {
    rigibodyPlayer.gravityScale = 0;
    isTocaSuelo = false;
    enEscalera = true;
    rigibodyPlayer.velocity = Vector2.zero;
    }
    se puede observar que se le quita la gravedad al Player, para que de esta manera cuando no se pulse nada el Player se quede inmóvil en medio de la escalera.
    Sin embargo en el método salgoEscalera():
    private void salgoEscalera()
    {
    enEscalera = false;
    animatorPlayer.Play("quieto");
    }
    no se le devuelve su gravedad original al Player, esto produce que al momento de salir de las plataformas el Player quede flotando y ya no respeten las físicas originales..
    En mi caso comente la línea del código donde se le quita la gravedad, esto me quita el problema del la levitación del Player, pero obviamente en las escalera el player tiende a caer.
    Al menos de esa manera lo he hecho yo, espero que a alguien le ayude.
    Saludos

    • @arcangelrs
      @arcangelrs 2 ปีที่แล้ว

      Viendo el siguiente video me di cuenta que ya existe una variable llamada gravedad en el Script de PlayerController, por lo que la solución definitiva en mi caso fue:
      Crear la variable gravedad:
      private float gravedad;
      Asignar en el método Start la gravedad inicial del Player:
      gravedad = rigibodyPlayer.gravityScale;
      Agregar en el método salgoEscalera la gravedad original del Player:
      rigibodyPlayer.gravityScale = gravedad;
      Con esas modificaciones me funciono todo perfecto

    • @PacoBarba
      @PacoBarba  2 ปีที่แล้ว

      Hola, me ha costado revisar esta semana los comentarios.
      En mi caso, en el capítulo de las pendientes deje la siguiente función que se ejecuta en el update, por eso yo en cuanto estoy en una escalera estoy continuamente quitando al gravedad, pero antes de esa comprobación la activo siempre, es otra forma de hacerlo.
      private void CheckPendiente() {
      enPendiente = false;
      rPlayer.gravityScale = gravedad;
      Un saludo!

  • @veijiouuuu
    @veijiouuuu 2 ปีที่แล้ว +1

    Suscrito!!! Gracias por el contenido 🙏

    • @PacoBarba
      @PacoBarba  ปีที่แล้ว

      Muchas gracias y bienvenido!

  • @jackpelon9852
    @jackpelon9852 2 ปีที่แล้ว +1

    Hola @Paco, estoy que quiero arreglar la velocidad de subida y de bajada del Player dentro de la escalera para que ambas velocidades sean iguales y descubrí que falta un trozo del video, concretamente en el minuto 20:29 de este mismo videotutorial, podrías comentarnos que pusiste allí para tener mejor el código, por favor amigo @Paco. Tal vez me ayude a solucionar ese problemita, el Player cuando esta dentro de la escalera sube a una velocidad y cuando baja lo hace a otra velocidad mas rápido y quiero que sus velocidades de subida y bajada sean iguales.

    • @PacoBarba
      @PacoBarba  2 ปีที่แล้ว +1

      Si lo tienes todo bien, ese movimiento se controla con
      rPlayer.position = new Vector2(objeto.transform.position.x, rPlayer.position.y + (v * 0.01f) )
      Parece como si no hubiras colocado rPlayer.gravityScale = 0 cuando detectas que se entra en escalera

  • @ondeanda
    @ondeanda 3 ปีที่แล้ว

    Nada, he intentado de muchas formas y hasta el minuto 10:50 todo igual y lo más que consigo es que pegue un "salto/tirón" al intentar subirla. Se pone una fracción de segundo en true el enEscalera y luego a false, y el personaje se queda suspendido en el aire sin gravedad.
    El fallo esta según creo en estas lineas:
    else if (enEscalera) SalgoDeEscalera();
    if (enEscalera)
    {
    Debug.Log("intentando subir escalera");
    velocidadEscalera = new Vector2(rPlayer.velocity.x, velocidad * v);
    rPlayer.MovePosition(rPlayer.position + velocidadEscalera * Time.deltaTime);
    }
    No se que hago mal, espero que sea alguna tonteria...
    *Edito: cree una variable a parte "velocidadEscalera" por si me daba algún problema la de "nuevaVelocidad". Y el mensaje de intentando subir escalera si me sale por consola.

    • @PacoBarba
      @PacoBarba  3 ปีที่แล้ว +1

      Lo único que se me ocurre es que te esté sacando de la escalera por la primera línea que me pones "if (enEscalera) SalgoDeEscalera();". Yo colocaría un montón de Debug.Log para ver en que momento te está tirando. De todos modos esta semana quiero publicar la siguiente parte de las escaleras, que aunque no corrige nada, si que las mejora.

    • @ondeanda
      @ondeanda 3 ปีที่แล้ว

      @@PacoBarba seguiré probando cosas, gracias por responder!

  • @salvadorgc8279
    @salvadorgc8279 3 ปีที่แล้ว

    Me estoy volviendo loco Sr Paco xDDDDD, solamente entra en la escalera si salto, he comprobado el script mil veces, he puesto debug en los rayos, y me detectan la escalera, la variable V se pone en 1 y en -1 según voy dandole arriba u abajo, por lo que también va bien , he ajustado los colliders.... Y no encuentro la solución al problema .

    • @PacoBarba
      @PacoBarba  3 ปีที่แล้ว

      Hola, he estado revisando mi código a ver si hubiera algo raro y lo único que se me ocurre es que conforme entres en la escalera se salga automáticamente por que detecte el suelo o algo así. Tal y como lo tengo y ajustando los colliders debería estar todo ok.

    • @salvadorgc8279
      @salvadorgc8279 3 ปีที่แล้ว

      @@PacoBarba buenas tardes muchísimas gracias por responder, el suelo lo detecta por los pies del player , pero en tu vídeo también detecta el suelo , me estoy volviendo loco , he revisado el código de nuevo hoy mío veces jajjajajaja

    • @salvadorgc8279
      @salvadorgc8279 3 ปีที่แล้ว

      He estado revisando de nuevo y creo que el fallo esta al darle arriba para subir la escalera, pero no se como solucionarlo, te dejo parte del código con los debugs, por si no te importa echarle un vistazo
      if (hitRayoDer || hitRayoMed)
      {
      if (hitRayoDer)
      {
      escaleraActiva = hitRayoDer.transform.gameObject;
      Debug.Log("TocandoEscaleras");
      }
      if (hitRayoMed)
      {
      escaleraActiva = hitRayoMed.transform.gameObject;
      // Aquí entra ----> Debug.Log("TocandoEscaleras");
      }
      if ((v >0) && (!enEscalera) && (rPlayer.velocity.y >= 0))
      {
      //Aquí entra si salto y pulso arriba----> Debug.Log("estoy pulsando para entrar en escalera");
      EntroEnEscalera(escaleraActiva);
      }
      }
      else if (enEscalera)
      {
      //Esto también lo hace ------> Debug.Log("Salgo de Escalera");+
      SalgoDeEscalera();
      }
      if (v < 0)
      {
      Vector2 posRayoAB = new Vector2(transform.position.x - (ccSize.x / 2), transform.position.y - (ccSize.y / 2) - 0.1f);
      RaycastHit2D hitRayoAB = Physics2D.Raycast(posRayoAB, Vector2.right, ccSize.x, capaEscalera);
      Debug.DrawRay(posRayoAB, Vector2.right * (ccSize.x), Color.red);
      if (hitRayoAB)
      {
      //Esto también lo hace ------>Debug.Log("Estoy Colisionando con escalera, debo entrar");
      EntroEnEscalera(hitRayoAB.transform.gameObject);
      }
      else if (enEscalera && tocaSuelo)
      {
      SalgoDeEscalera();
      //Esto también lo hace ------> Debug.Log("Saliendo De Escalera");
      }
      }
      if (enEscalera)
      {
      if (v != 0)
      {
      //Esto no lo hace, solo lo hace si salto------> Debug.Log("Pulso para subir escaleras");
      aPlayer.Play("SubeEscalera");
      }
      else
      {
      //Esto también lo hace ------> Debug.Log("Estoy quieto en escaleras");
      aPlayer.Play("QuietoEscalera");
      }
      nuevaVelocidad = new Vector2(rPlayer.velocity.x, velocidadEscalera * v);
      rPlayer.MovePosition(rPlayer.position + nuevaVelocidad * Time.deltaTime);
      CompruebaSalidaLateral();
      }
      }