SIGUE LA SERIE 👉🔴Cómo CREAR una ANIMACIÓN en Unity (𝐏𝐚𝐬𝐨 𝐚 𝐏𝐚𝐬𝐨!!) ➤ ua-cam.com/video/HcHjlmrARuE/v-deo.html 🤔¿Tienes dudas? pregúntame en este enlace 👇👇👇 rocketjam.dev/contacto
Hola lo siento, tengo todo el codigo bien pero el codigo me salta el error cs1729 o que el "Vector2" no contiene un constructor que tome 6 argumentos, sabe como se soluciona?
Se lo agradezco demasiado. Había probado muchos métodos de saltos y todos servían, solo que no encajaban en mi juego unity. Gracias a ti, logre encontrar el salto adecuado, ahora el jugador puede saltar en la orilla del piso, solo detecta suelo y no se pega en las paredes. Me impresiona los códigos que usaste, no los conocían, me servirán mucho para ahorrar líneas. Gracias por la ayuda y tome su 👍 buen hombre.
Gran tutorial! Una mecánica como el doble salto que ha sido explicada por muchos pero a menudo de formas muy chapuceras, aburridas y largas, pero tu la has clavado!
No entiendo porque tan pocos likes xd la verdad tus explicaciones son muy claras y también le das ese gusto picante de reto al no tener todas las respuestas servidas, porque hay pequeñas trampitas para que uno piense el porque no sale igual xDD eso lo hace mas entretenido. Gracias por el tiempo invertido, es usted genial!
Para los que le salte infinitas veces, después incluso de tener el código impecable, el problema casi SIEMPRE, reside en que el collider que habeis creado para detectar el suelo, también detecta el box 2d collider del jugador, para probar que es así, lo desactivais o borrais, y si ese es el problema, pal chat gpt y le pedis que os implemente el physics 2d overlapboxAll, que omite los colliders del jugador
@@Xddddeek Assets > Create > 2D > Physics Material 2D. En las versiones más recientes de Unity movieron algunas cosas. Te recomiendo buscar en la documentación de Unity cuando te pase algo como eso
lo de la friccion puede servir pues al quedarse pegado en la pared por unos 2 o 1 segundo te da la opcion de poder hacer la ilusion de si se agarrase de la pared y saltase Aprovechando errores parte 1
Sigo tu curso me esta enganchando, enhorabuena no tiene desperdicio, una cosa que aclarar, tras desesperarme con los saltos infinitos, creo que di con la solución, en el minuto 14:39 del vídeo cuando añades saltosRestantes - -;, yo añadí otra línea igual, quedando así saltosRestantes - -; saltosRestantes - -; Y parece que ya no da saltos infinitos, x si a alguien le sirve. Un saludo
Hay un problema que detecto yo, quiza exista otra forma de solucionarlo, pero si nosotros quiza usamos un tilemap y alli dcimos que los bordes sean suelo, va a saltar por la pared tambien
cuando el jugador salta y choca su cabeza con un objeto(en este caso con un objeto flotante como esta en tu mapa ),la cabeza del jugador queda pegado a ese objeto (siempre y cuando aprietes la tecla space rápidamente).Es un bug que no se si solucione con Invoke() o con disminuir la caja de colision.
Alguien me puede ayudar hasta ahora seguir los pasos y no me sale la capa suelo PDST: mi personaje esta mirando a la izquiera por eso el false SCRIpt: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player_controller : MonoBehaviour { public float velocidad; public float fuerzaSalto; public LayerMask capaSuelo; private Rigidbody2D rigidBody; private BoxCollider2D boxCollider; private bool mirandoDerecha = false;
private void Start() {
rigidbody = GetComponent(); boxCollider = GetComponent(); } // Update is called once per frame void Update() { ProcesarMovimiento(); ProcesarSalto(); } bool EstaEnSuelo() { RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capaSuelo); return raycastHit.collider != null; }
Bueno recuerda que primero tienes que crearla por unity(no por los codigos), vas a layers,.... y luego pones "add layer"..., y luego nombras una en la capa 6 o 8 no importa, si le pusiste "capasuelo" mola, tu codigo esta bien si haces eso ya te deberia aparecer, por si acaso recuerda que todos los personajes deben estar en la misma Layer
Hay un error y cuando pongo 2 en numero de salto lo detecta en 3 y otra cosa cuando choco con una pared me detecta que toque el piso y me da otros 2 saltos en el aire pd:Tambien pasa si choca con el techo
Para que no te pase esas cosas tendrás que ajustar los valores que le pasas a la función del BoxCast. Prueba a hacer la caja un poco más pequeña que el collider y darle menos distancia al cast. Un saludo.
tengo el mismo problema de que cuando colisiono con una pared o con un techo se reinicia el contador pero solo me da un salto mas no me molesta pero me gustaria quitarle ese salto de mas hasta mientras seguire el siguiente tutorial no pares enseñas mejor que un profesor de universidad
no logro solucionar el problema de que me sigue saltando 800 veces, ósea apretó el de saltar y quiero que cuando toque tierra tenga que volver a saltar, lo que hace es que en el mismo aire salta , yo no quiero que en el aire salte y si pongo el código de alguien mas, tengo que borrar todos lo ajustes para que funcione el nuevo código pero prácticamente tengo que hacer todo de cero
hola ayuda tengo un problema es este Assets\scripts\controlcharacter.cs(28,10): error CS0161: 'controlcharacter.EstaEnSuelo()': not all code paths return a value estoy en el proceso de el minuto 11:56
Hola, más adelante en el vídeo continuo desarrollando esa función con la línea de "return raycastHit.collider != null" con eso debería funcionarte. Un saludo.
@@RocketJam Assets\scripts\controlcharacter.cs(31,16): error CS0103: The name 'raycastHit' does not exist in the current context eso me salta lo siento soy un total desastre en esto abecés quiero darme por vencido
@@cristhophermartinez8180 Tienes que tener cuidado de escribirlo exactamente como lo has hecho a la hora de declararlo, te recomiendo que compares tu código de la función estaEnSuelo() con el mío, tienes un enlace en la descripción pero también lo puedes consultar aquí 👇 gist.github.com/RocketJamDev/2c206fb069d102a2182d46b223a1399d Ánimo!
Ok gracias mi Bro seguiré buscando gracias por los ánimos así comienza a subir mucho contenido para que UA-cam y su adgorimo comienzé a recomendarte a más gente
Muchas gracias por los tutoriales son de gran ayuda, quisiera preguntar por que siempre hago que cuando pone 1 salto, salte 2 veces, cuando pone 2, salta maximo 3, y asi, no logro solucionarlo :(
hola cuando copie y pegue el scrip y lo guarde me salio esto The referenced script on this Behaviour (Game Object 'personaje') is missing! como lo soluciono?
Una pregunta, cuando termino el codigo de saltos dobles, ya cuando le asigno que los saltos máximos son dos, y termino de compilar todo el codigo de saltos, cuando le doy a play, hay veces en que el personaje me da tres y no dos saltos, ¿qué puedo hacer ahí?
Estoy esperando el siguiente ya!! Son fenomenales tus video s y si a ti te es más cómodo creo q no pasaría nada por qué añadirse algo más por capítulo ya que sino vas a tener q hacer bastantes más no??
Hola, de antemano que buenos videos la verdad estoy muy contento de poder haber encontrado tu curso, amm me surgió un problema y no sé si puedas ayudarme al resolver los bugs mi player dejo de saltar y no sé a qué se deba, soy nuevo en esto y no moví absolutamente nada,
@@RocketJam Hola, la verdad muchas gracias por responder, al final le di muchas vueltas y resolvi el problema, soy nuevo en esto haha saludos y gracias, ah y el error fue desde el tile set no lo hice igual que tu y ya despues entendi que marque no coo si fuece el suelo bueno, algo a si despues de desmarcar algunas cosas y a si, funciono
Muy buenas Antonio. El vídeo está muy entretenido, gracias por explicarlo tan bien. Pero tengo una duda existencial; 😬 ¿Qué tipo de fuente usas en Visual Studio? Se ve bastante interesante, y tengo ganas de cambiar un poco, pero encontrar fuentes monoespaciadas que sean bonitas a la vez que legibles es complicado. Gracias. 😉
El personaje puede realizar un salto de pared en mi caso, si choco con una pared y luego giro inmediatamente al lado contrario y salto se puede hacer de forma más o menos constante ¿Cómo podría arreglar eso?
Tengo un problema con los saltos dobles y es que el personaje si le pongo que saltos máximos dos salta indefinidamente y si le pongo 1 salta solo una vez
alguien sabe porque al hacer el salto, la variable saltosRestantes hay ocaciones en q no disminuye 1 cuando se presiona la tecla, haciendo q el personaje de 1 salto de mas?
Es posible que la comprobación de que el personaje está tocando el suelo se esté haciendo en el primer frame del salto cuando el personaje esta tocando el suelo. Por esa razón el primer salto no cuenta y tendrías un salto más. Para solucionarlo habría que esperar unas décimas de segundo a que el personaje se separe del suelo para empezar a comprobar. En el vídeo del Slime hago algo parecido por si necesitas una referencia de cómo hacerlo. Un saludo!
Hola, ¿Cuál es realmente la diferencia entre emitir un rayo y la caja para el control de la colisión con el suelo? ¿Qué beneficios tiene la caja?. Gracias por su tiempo.
Quizas tu personaje esta parado bien en la punta de una montaña (esta tocando el suelo con pocos pixeles), su raycast sale desde el centro del personaje entonces no tocaria suelo (ya que el centro del personaje efectivamente no esta sobre suelo). Sin embargo el box al tener el tamaño del personaje, si cualquier parte de los pies toca el suelo, reconocera que EstaEnSuelo. Creo que va por ahi la explicacion
Holaa Rocket tengo un problema , cuando cambio de scena el jugador salta bajo y me fijo si an cambiado los valores de fuerza de salto y demas y siguen igual, que seria?
Hola! Puedes mandarme tu código a través del formulario de contacto de mi página web www.rocketjam.dev/contacto así le puedo echar un ojo e intentar ayudarte. Un saludo!
Hola, en lo de que no de doble salto, cuando termino y guardo me sale error CS1022:Type or namespace definition, or end-of file expected. Y tampoco me deja probarlo ni cambiar lo de la capaSuelo desde la propiedad del script. ¡Por favor, que alguien me ayude!!
hola te digo nose si aun tendras el problema pero a mi me sucedia lo mismo y este es el script que tengo y me sirve using System.Collections; using System.Collections.Generic; using UnityEngine; public class caractercontroler : MonoBehaviour { public float velocidad; public float fuerzasalto; public float SaltosMaximos; public LayerMask Capasuelo; public caractercontroler(LayerMask capasuelo) { Capasuelo = capasuelo; } private new Rigidbody2D rigidbody; public Rigidbody2D Rigidbody { get => rigidbody; set => rigidbody = value; } private BoxCollider2D boxCollider; private float SaltosRestantes; private bool mirandoDerecha = true; private void Start() { Rigidbody = GetComponent(); boxCollider = GetComponent(); SaltosRestantes = SaltosMaximos; } // Update is called once per frame void Update() { ProcesarMovimiento(); ProcesarSalto(); } bool EstaenSuelo() { RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, Capasuelo); return raycastHit.collider != null; } void ProcesarSalto() { if (EstaenSuelo()) { SaltosRestantes = SaltosMaximos; }
if (Input.GetKeyDown(KeyCode.Space) && SaltosRestantes > 0) { SaltosRestantes--; rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f); Rigidbody.AddForce(Vector2.up * fuerzasalto, ForceMode2D.Impulse); } } void ProcesarMovimiento() { // Logica de Movimiento. float InputMovimiento = Input.GetAxis("Horizontal");
Rigidbody.velocity = new Vector2(InputMovimiento * velocidad, Rigidbody.velocity.y); GestionarOrientacion(InputMovimiento); } void GestionarOrientacion(float InputMovimiento) { // Si se cumple condicion if ((mirandoDerecha == true && InputMovimiento > 0) || (mirandoDerecha == false && InputMovimiento < 0)) { // Ejecutar codigo volteando mirandoDerecha = !mirandoDerecha; transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y); } } } espero y te sirva
Algo tarde, pero tengo un problema el cual es que el doble salto no es constante, me explico, dentro de unity cuando le marco que el maximo de saltos es 2, en un inicio funciono, pero a lo largo que seguia escribiendo codigo, cada vez que probaba o no funcionaba, o funcionaba pero luego dejaba de dar soble salto, se soluciono al marcar con 3 salto maximos, saltaba sin problemas, pero habeces podias dar 3 saltos En resumen, como hago que el doble salto sea constante y no tardio?
Hola Antonio! Tengo un problema con el salto! realmente funciona a la perfección lo que enseñaste, y el código esta bien! Solo que al parecer por lo que comprendo la caja es demasiado grande y eso hace que la función detecte el suelo sin siquiera tocarlo, incluso copiando tu código a la perfección pasa, como hago para cambiar el diámetro de la caja?
Hola! Puedes editar el tamaño del BoxCollider desde el inspector de Unity. Hay un botón que habilita la edición y luego lo puedes modificar en la escena como si se tratase de una caja en Photoshop. Un saludo!
¿soy el único que tiene un bug que simplemente, por ejemplo hago el primer o salto o el doble salto y no puede saltar mas? ¿alguien sabe como puedo solucionarlo?
Hola, bastante tarde la pregunta pero hace poco comencé a ver tus videos, cuando el personaje salta hace el boble salto, pero si llega a alguna parte como el techo del nivel o una plataforma flotante, puedo saltar infinitamente en el techo, creo que es por el boxcollider que detecta el techo como suelo y produce ese efecto, ¿Se puede solucionar?
No logro hacer funcionar correctamente la comprobación de si está en el suelo. Me arroja falsos positivos que provocan diversos bugs en el salto: a veces permite triple y hasta cuádruple salto de forma aleatoria, si te pegas a las paredes permite saltos infinitos, etc. Pero lo más preocupante es que al llegar al vídeo del slime, no funciona la parte de empujarte lejos del enemigo, nada más darte el impulso (y estando en el aire) la función EstaEnSuelo devuelve un falso positivo y me devuelve a puedeMoverse=true :( He vuelto a repasar los boxcolliders del personaje, la capa suelo, todo... y todo está bien. Lo único, estoy en unity 2022 no sé si habrá cambiado algo del procesamiento de físicas o colisiones.
A mi también me está pasando lo del salto caminando contra una pared. Con un Debug.Log pude ver que no siempre se reduce el salto máximo y creo que es por el raycast que es con un box
copie el código igual pero me sale...Assets\Scripts\Character_control.cs(26,10): error CS0161: 'CharacterControl.EstaEnSuelo()': not all code paths return a value... no se porq puede ser
Hola! Puedes mandarme tu código a través del formulario de contacto de mi página web www.rocketjam.dev/contacto así le puedo echar un ojo e intentar ayudarte. Un saludo!
Tengo un problema, hice todo igual y anda todo genial, pero cuando camino aveces el personaje se queda pillado y tengo que saltar para que siga caminando 😢
Me pasa que cuando realizo los dos saltos ya despues no puedo saltar mas El codigo es este: public class Character_controller : MonoBehaviour { public float Velocidad; public float Fuerza_del_salto; public int SaltosMaximos; private new Rigidbody2D rigidbody; private bool mirando_derecha; private BoxCollider2D Boxcollider; private LayerMask Capasuelo; private int SaltosRestantes; // Start is called before the first frame update void Start() { Boxcollider = GetComponent(); rigidbody = GetComponent(); SaltosRestantes = SaltosMaximos; } // Update is called once per frame void Update() { movimiento(); Salto(); } void movimiento(){ float Input_movimiento = Input.GetAxis("Horizontal"); rigidbody.velocity = new Vector2 (Input_movimiento * Velocidad, rigidbody.velocity.y); Gestionar_posicion(Input_movimiento); } bool Estar_en_suelo() { RaycastHit2D raycasthit = Physics2D.BoxCast(Boxcollider.bounds.center, new Vector2 (Boxcollider.bounds.size.x,Boxcollider.bounds.size.y), 0f, Vector2.down, 0.2f, Capasuelo); return raycasthit.collider != null; } void Salto(){ if (Input.GetKeyDown(KeyCode.Space) && SaltosRestantes > 0){ SaltosRestantes--; rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f); rigidbody.AddForce(Vector2.up*Fuerza_del_salto, ForceMode2D.Impulse);
el código esta bien pero igual sigo saltando jaja ya borre el código, lo volví a escribir y sigue igual, tratare mañana de ver si lo logro solucionar o usare el código de salto de alguien mas, si es que funciona o tratare de escribirlo por mi cuenta. les aviso cuando lo logre solucionar 😊😊😊😊
Tiren paro me quede en el segundo 11:54 y mi codigo esta igual, pero a mi da error y pone "error CS0161: 'PlayerMove.EstaEnSuelo()': not all code paths return a value"
Hola, que tal? No se si responderas por el tiempo que tiene el video pero por si acaso comento, tengo un detalle que hice todo al pide de la letra como el video pero el personaje no salta, y eso empezó a suceder cuando agregre el codigo de box.cast para que solo realizara saltos cuando hicers contanto en el suele. Tambien hice layer y suelo @RocketJam
tengo un problema que no lo puedo resolver de niguna forma, cuando paso la variable a capaSuelo); y lo guardo, en Unity no me aparece para seleccionar la capa y lo volvi a reescribir otra vez al script y no consigo que aparezca
Por alguna razón, terminé de ver el video unas 3 veces y sigo sin poder saltar en mi juego, ya revisé todo el código y ya hice todo lo que hiciste en el video y ahora no puedo saltar ni una sola vez, antes podía muchísimas veces, ahora no, ayuda, por favor. Código: using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { public float fuerzaSalto; public float Velocidad; public int saltosMaximos; public LayerMask capaSuelo; private bool mirandoDerecha = true; private Rigidbody2D personajeRigid; private BoxCollider2D boxCollider; private Collider2D personajeCollider; private float saltosRestantes; // Start is called before the first frame update private void Start() { personajeRigid = GetComponent(); boxCollider = GetComponent(); saltosRestantes = saltosMaximos; } // Update is called once per frame void Update() { moverPersonaje(); salto(); } bool EstaEnSuelo() { RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capaSuelo); return raycastHit.collider != null; } void moverPersonaje() { float inputMovimiento = Input.GetAxis("Horizontal"); personajeRigid.velocity = new Vector2(inputMovimiento * Velocidad, personajeRigid.velocity.y); GestionarOrientacion(inputMovimiento); } void GestionarOrientacion(float inputMovimiento) { if( (mirandoDerecha == true && inputMovimiento < 0) || (mirandoDerecha == false && inputMovimiento > 0)) { mirandoDerecha = !mirandoDerecha; transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y); } } void salto () { if (EstaEnSuelo()) { saltosRestantes = saltosMaximos; } if (Input.GetKeyDown(KeyCode.Space) && saltosRestantes > 0) { saltosRestantes--; personajeRigid.velocity = new Vector2(personajeRigid.velocity.x, 0f); personajeRigid.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse); } } }
En el scrip no hay problema, ummm le diste valor del saltos maximos en el inspector del personaje, umm en tu caso player Scrip y le atribuiste la capa suelo, que creaste de la plataforma? creo que de hay parte tu problema , codigo no es, suerte
Ese creo que es el operador de diferencia `!=` el cual aparentemente el tema de Visual Studio que usa rocket jam seguramente lo cambia para que se vea así
tengo el problema que los saltos no se me resetean al tocar el suelo y que cuando se acaba sigue saltando igual hasta que no toque el suelo que hice mal? llevo 2 horas buscando sing System.Collections; using System.Collections.Generic; using UnityEngine; public class CharacterController : MonoBehaviour { public LayerMask capasuelo; public float velocidad; public float fuerzaSalto; public int saltoMaximos; private Rigidbody2D rigidbody; private bool mirandoDerecha = true; private BoxCollider2D boxCollider; private int saltoRestantes; private void Start() { rigidbody = GetComponent(); boxCollider = GetComponent(); saltoRestantes = saltoMaximos; } // Update is called once per frame void Update() { ProcesarMovimiento(); ProcesarSalto(); } bool EstaenSuelo() { RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capasuelo); return raycastHit.collider != null; } void ProcesarSalto() { if (EstaenSuelo()) { saltoRestantes = saltoMaximos; } if (Input.GetKeyDown(KeyCode.Space) && saltoRestantes > 0) { saltoMaximos--; rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f); rigidbody.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse); } } void ProcesarMovimiento() { // Logica de movimiento. float inputMovimiento = Input.GetAxis("Horizontal"); rigidbody.velocity = new Vector2(inputMovimiento * velocidad, rigidbody.velocity.y); GestionarOrientacion(inputMovimiento); } void GestionarOrientacion(float inputMovimiento) { //Si se cumple condicion if((mirandoDerecha == true && inputMovimiento < 0) || (mirandoDerecha == false && inputMovimiento > 0)) { //Ejecutar codigo de volteado mirandoDerecha = !mirandoDerecha; transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y); }
@@jevijarko yo pense q tambien podria ser eso y le fui ajustando pero llego el punto en q ya estando en el suelo no me restauraba los saltos como si aun estuviera en el aire y pense q no era eso...
Hola ya encontraste la solución? Porque a mi me aparece lo mismo y tube que borrar todo y escribir de nuevo, pero igual me salta eso, y no se como solucionarlo
ALGUIEN ME PUEDE DECIR PORQUE EL PERSONAJE NO PUEDE SALTAR? using System.Collections; using System.Collections.Generic; using UnityEngine; public class script : MonoBehaviour { public float velocidad; public float fuerzaSalto; public float saltosMaximos; public LayerMask capaSuelo; private Rigidbody2D rigidbody; private BoxCollider2D boxCollider; private bool MirandoDerecha = true; private float saltosRestantes;
el personaje, al colisionar con las paredes también recupera ese doble salto, me gustaría que solo tenga la posibilidad de recuperar los saltos restantes solo cuando toca el suelo...
Puedes dibujar los tiles de la pared y del suelo en distintas capas y ponerles la etiqueta de Suelo solo a los del suelo. Así el personaje solo recuperará los saltos al tocar el suelo. Un saludo!
@@RocketJam pero cuando coliciona por debajo de un bloque flotante ,recupero el maximo antes tocar piso y se hace infinito por otro lado te felicito, buen temple para explicar Gracias y no dejes de subir videos
hola! espero que puedas responderme pero sabes que me da un error cuando termino todo el codigo de este video, me queda en rojoEstaEnSuelo y no me deja hacer nada despues en unity, espero que tengas una respuesta, gracias! ya me suscribi y le di like a todos los videos, estoy siguiendolo desde el inicio.
SIGUE LA SERIE 👉🔴Cómo CREAR una ANIMACIÓN en Unity (𝐏𝐚𝐬𝐨 𝐚 𝐏𝐚𝐬𝐨!!)
➤ ua-cam.com/video/HcHjlmrARuE/v-deo.html
🤔¿Tienes dudas? pregúntame en este enlace 👇👇👇
rocketjam.dev/contacto
Bro,mi personaje no se le soluciona el error de saltar en el aire
Hola lo siento, tengo todo el codigo bien pero el codigo me salta el error cs1729 o que el "Vector2" no contiene un constructor que tome 6 argumentos, sabe como se soluciona?
Se lo agradezco demasiado. Había probado muchos métodos de saltos y todos servían, solo que no encajaban en mi juego unity. Gracias a ti, logre encontrar el salto adecuado, ahora el jugador puede saltar en la orilla del piso, solo detecta suelo y no se pega en las paredes.
Me impresiona los códigos que usaste, no los conocían, me servirán mucho para ahorrar líneas. Gracias por la ayuda y tome su 👍 buen hombre.
Muchas gracias gracias por el Super Thanks! Me alegro de que te haya servido. Un saludo!
Gran tutorial! Una mecánica como el doble salto que ha sido explicada por muchos pero a menudo de formas muy chapuceras, aburridas y largas, pero tu la has clavado!
Muchas gracias!
Hasta el minuto 12:50 no aparece la Capa Suelo en el CharacterControler asi que no lo busquen en el 11:20 jajaja. Y el signo desigual déjenlo como !=
Me salvoaste alto capo
Te la rifaste
Me salvaste
el salvador de todo pa
Gracias, pase unos minutos buscando como escribirlo sin resultados jajaja.
No entiendo porque tan pocos likes xd la verdad tus explicaciones son muy claras y también le das ese gusto picante de reto al no tener todas las respuestas servidas, porque hay pequeñas trampitas para que uno piense el porque no sale igual xDD eso lo hace mas entretenido.
Gracias por el tiempo invertido, es usted genial!
Me alegro que te gusten mis vídeos! Muchas gracias :)
Para los que le salte infinitas veces, después incluso de tener el código impecable, el problema casi SIEMPRE, reside en que el collider que habeis creado para detectar el suelo, también detecta el box 2d collider del jugador, para probar que es así, lo desactivais o borrais, y si ese es el problema, pal chat gpt y le pedis que os implemente el physics 2d overlapboxAll, que omite los colliders del jugador
Gracias 🙃
Puf, mal consejo lo suyo es que chatgpt se lo explique no que se lo haga
*02:55** ForceMode2D.Impulse [tipo de fuerza]*
*03:42** Calibrar gravedad y fuerza del salto*
*06:54** Quitar fricción con las paredes*
no me aparece el material fisico 2d
:(((((((
a mi tampoco asi que buscalo en los component@@Xddddeek
@@Xddddeek Assets > Create > 2D > Physics Material 2D. En las versiones más recientes de Unity movieron algunas cosas. Te recomiendo buscar en la documentación de Unity cuando te pase algo como eso
@@Shinobi3264 gracias jajjaja
El mejor canal donde puedes aprender a, usar Unity
Este tipo de videos son oro. Gracias!!!
Gracias a ti!
[Header("Movimiento")]
[SerializeField]private float velocidad;
[Header("Salto")]
[SerializeField]private float fuerzaSalto;
[Header("Saltos Multiples")]
[SerializeField]public int saltosMax;
[SerializeField]private int saltosRestantes;
private Rigidbody2D rb;
private BoxCollider2D bc;
public LayerMask Suelo;
[SerializeField] private bool mirandoDerecha = true;
void Start()
{
rb = GetComponent();
bc = GetComponent();
saltosRestantes = saltosMax;
}
void Update()
{
ProcesarMovimiento();
ProcesarSalto();
}
bool EstaEnSuelo()
{
RaycastHit2D rayCast2D = Physics2D.BoxCast(bc.bounds.center, new Vector2(bc.bounds.size.x, bc.bounds.size.y), 0f, Vector2.down, 0.2f, Suelo);
return rayCast2D.collider != null;
}
void ProcesarSalto()
{
if(EstaEnSuelo())
{
saltosRestantes = saltosMax;
}
if(Input.GetButtonDown("Jump") && saltosRestantes > 0)
{
rb.velocity = new Vector2(rb.velocity.x, 0f);
rb.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse);
saltosRestantes--;
}
}
void ProcesarMovimiento()
{
float inputMovimiento = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(inputMovimiento * velocidad, rb.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputMovimiento)
{
if((mirandoDerecha && inputMovimiento < 0) || (mirandoDerecha == false && inputMovimiento > 0))
{
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
No es por molestar pero dice que tu código tiene 7 errores
Los errores pueden ser los nombres, dudo que los nombres del codigo sean los mismos que los que tu agregaste
gracias
Que padre me sorprende no a ver encontrado este canal antes
lo de la friccion puede servir pues al quedarse pegado en la pared por unos 2 o 1 segundo te da la opcion de poder hacer la ilusion de si se agarrase de la pared y saltase
Aprovechando errores parte 1
Vaya q guay y al meterse dentro una animación diferente aprovechando Bugs parte 2
Gracias wey, te amo, no había podido configurar ese problema, enserio que muchas gracias. :D
Ese problema de que al segundo salto lo afectaba ligeramente la gravedad me traía vuelto loco. Muchas gracias por el vídeo me sirvió mucho.
Sigo tu curso me esta enganchando, enhorabuena no tiene desperdicio, una cosa que aclarar, tras desesperarme con los saltos infinitos, creo que di con la solución, en el minuto 14:39 del vídeo cuando añades saltosRestantes - -;, yo añadí otra línea igual, quedando así
saltosRestantes - -;
saltosRestantes - -;
Y parece que ya no da saltos infinitos, x si a alguien le sirve.
Un saludo
estuve mas de media hora intentando arreglar eso, me salvaste :D
Hay un problema que detecto yo, quiza exista otra forma de solucionarlo, pero si nosotros quiza usamos un tilemap y alli dcimos que los bordes sean suelo, va a saltar por la pared tambien
cuando el jugador salta y choca su cabeza con un objeto(en este caso con un objeto flotante como esta en tu mapa ),la cabeza del jugador queda pegado a ese objeto (siempre y cuando aprietes la tecla space rápidamente).Es un bug que no se si solucione con Invoke() o con disminuir la caja de colision.
si, a mi me pasa igual y no se como solucionarlo
Que gran tutorial, me has ayudado a quitar los saltos infinitos.Gracias
PD:Te has ganado un suscriptor nuevo 😁
Gracias a ti! :)
Para los que no les deja lo del physic material
Arriba en assets le dan a 2d y ahi esta
Grax bro me salvaste
ay un problema no se porque sigo saltando muchas veces y todo lo e echo bien ayuda gracias.
Te amo!!!!!!!!!!! tus videos son increíbles.
Muchas gracias! Me alegro de que te sean útiles :)
podrías hacer un video enseñando a como crear un salto regulable? sos alto capo.
Alguien me puede ayudar hasta ahora seguir los pasos y no me sale la capa suelo
PDST: mi personaje esta mirando a la izquiera por eso el false
SCRIpt:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player_controller : MonoBehaviour
{
public float velocidad;
public float fuerzaSalto;
public LayerMask capaSuelo;
private Rigidbody2D rigidBody;
private BoxCollider2D boxCollider;
private bool mirandoDerecha = false;
private void Start()
{
rigidbody = GetComponent();
boxCollider = GetComponent();
}
// Update is called once per frame
void Update()
{
ProcesarMovimiento();
ProcesarSalto();
}
bool EstaEnSuelo()
{
RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capaSuelo);
return raycastHit.collider != null;
}
void ProcesarSalto()
{
if(Input.GetKeyDown(KeyCode.Space) && EstaEnSuelo()
{
rigidBody.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse);
}
}
void ProcesarMovimiento()
{
// Logica de movimiento.
float inputMovimiento = Input.GetAxis("Horizontal");
rigidbody.velocity = new Vector2(inputMovimiento * velocidad, rigidbody.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputMovimiento)
{
//si se cumple condicion
if( (mirandoDerecha == false && inputMovimiento > 0) || (mirandoDerecha == true && inputMovimiento < 0) )
{
// ejecutar código de volteado
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
Bueno recuerda que primero tienes que crearla por unity(no por los codigos), vas a layers,.... y luego pones "add layer"..., y luego nombras una en la capa 6 o 8 no importa, si le pusiste "capasuelo" mola, tu codigo esta bien si haces eso ya te deberia aparecer, por si acaso recuerda que todos los personajes deben estar en la misma Layer
Hay un error y cuando pongo 2 en numero de salto lo detecta en 3 y otra cosa cuando choco con una pared me detecta que toque el piso y me da otros 2 saltos en el aire pd:Tambien pasa si choca con el techo
Para que no te pase esas cosas tendrás que ajustar los valores que le pasas a la función del BoxCast. Prueba a hacer la caja un poco más pequeña que el collider y darle menos distancia al cast. Un saludo.
Yo tengo este problema también, ya probé prácticamente de todo y no me ah funcionado nada
Prueben restarle 0.1f al boxCollider.bounds.size.x e y. Así: (boxCollider.bounds.size.x - 0.1f, boxCollider.bounds.size.y - 0.1f)
gracias master excelente tutorial
Gracias por compartir
Buen contenido, enhorabuena por el canal. Me suscribo!
Muchas gracias! Bienvenido :)
hola buenas noches tendras el proyecto completo
eres el mejor
Hola, ¿Podrías hacer un tutorial de como hacer que el personaje escale las paredes?
ya se iso el tutorial XD ua-cam.com/video/2wbrHTfgvbs/v-deo.html
Si aprovechando Bugs XD
bien explicado, turoeial exelente
Buen video, muchas gracias
Gracias a ti!
Muchas gracias por tan buenas explicaciones
como se pone el simbolo de igual atravesado
tengo el mismo problema de que cuando colisiono con una pared o con un techo se reinicia el contador pero solo me da un salto mas no me molesta pero me gustaria quitarle ese salto de mas hasta mientras seguire el siguiente tutorial no pares enseñas mejor que un profesor de universidad
no contesta comentarios que no sean de apoyo
no logro solucionar el problema de que me sigue saltando 800 veces, ósea apretó el de saltar y quiero que cuando toque tierra tenga que volver a saltar, lo que hace es que en el mismo aire salta , yo no quiero que en el aire salte y si pongo el código de alguien mas, tengo que borrar todos lo ajustes para que funcione el nuevo código pero prácticamente tengo que hacer todo de cero
hola ayuda tengo un problema es este Assets\scripts\controlcharacter.cs(28,10): error CS0161: 'controlcharacter.EstaEnSuelo()': not all code paths return a value estoy en el proceso de el minuto 11:56
Hola, más adelante en el vídeo continuo desarrollando esa función con la línea de "return raycastHit.collider != null" con eso debería funcionarte. Un saludo.
@@RocketJam Assets\scripts\controlcharacter.cs(31,16): error CS0103: The name 'raycastHit' does not exist in the current context eso me salta lo siento soy un total desastre en esto abecés quiero darme por vencido
te importaría si seguimos en contacto por Instagram ahora mismo eres la persona con quien puedo hablar sobre programación
@@cristhophermartinez8180 Tienes que tener cuidado de escribirlo exactamente como lo has hecho a la hora de declararlo, te recomiendo que compares tu código de la función estaEnSuelo() con el mío, tienes un enlace en la descripción pero también lo puedes consultar aquí 👇 gist.github.com/RocketJamDev/2c206fb069d102a2182d46b223a1399d
Ánimo!
Ok gracias mi Bro seguiré buscando gracias por los ánimos así comienza a subir mucho contenido para que UA-cam y su adgorimo comienzé a recomendarte a más gente
Muchas gracias por los tutoriales son de gran ayuda, quisiera preguntar por que siempre hago que cuando pone 1 salto, salte 2 veces, cuando pone 2, salta maximo 3, y asi, no logro solucionarlo :(
pudiste solucionarlo? me pasa lo mismo
a mi tamnien me pasa lo mismo, no se aun que paso
pudiste solucionar bro
hola cuando copie y pegue el scrip y lo guarde me salio esto The referenced script on this Behaviour (Game Object 'personaje') is missing! como lo soluciono?
A mi igual
Esto funciona con nombres si tu personaje se llama player no funciona ya que no detecta el nombre de personaje podria ser eso
Tengo el código perfecto pero mi personaje sigue saltando infinitamente.
Alguien sabe por que?
we ami tambien me pasa pipipi
@@adrianvilchezolivares8393 ya lo pude arreglar solo que tuve que quitar el doble salto, si no me daba el mismo problema
como quitas el doble salto?
@@adrianvilchezolivares8393 borra todo el código de salto y cópialo de nuevo, pero no metas obviamente el del doble salto
Una pregunta, cuando termino el codigo de saltos dobles, ya cuando le asigno que los saltos máximos son dos, y termino de compilar todo el codigo de saltos, cuando le doy a play, hay veces en que el personaje me da tres y no dos saltos, ¿qué puedo hacer ahí?
Estoy esperando el siguiente ya!! Son fenomenales tus video s y si a ti te es más cómodo creo q no pasaría nada por qué añadirse algo más por capítulo ya que sino vas a tener q hacer bastantes más no??
Prefiero mantenerlos cortos aunque salgan muchos, porque así son más fáciles de hacer y menos pesados de ver jajajajaj
Nice 👍 pues esperando con ansias el siguiente.... 😁
super util
Algo que haría mucho más fluido y mejor el salto, sería el tiempo muerto al dejar la plataforma como en Mario Bros, Gracias por el tuto 👍
Hola, de antemano que buenos videos la verdad estoy muy contento de poder haber encontrado tu curso, amm me surgió un problema y no sé si puedas ayudarme al resolver los bugs mi player dejo de saltar y no sé a qué se deba, soy nuevo en esto y no moví absolutamente nada,
Buenas! Sí quieres puedes mandarme tu código a través de la página de contacto de mi web rocketjam.dev/contacto un saludo!
@@RocketJam Hola, la verdad muchas gracias por responder, al final le di muchas vueltas y resolvi el problema, soy nuevo en esto haha saludos y gracias, ah y el error fue desde el tile set no lo hice igual que tu y ya despues entendi que marque no coo si fuece el suelo bueno, algo a si despues de desmarcar algunas cosas y a si,
funciono
Y me das la respuesta
Jajaja
@@extremeGames-uf2if a ti como te fue, te dio algun error?
Muy buenas Antonio. El vídeo está muy entretenido, gracias por explicarlo tan bien. Pero tengo una duda existencial; 😬 ¿Qué tipo de fuente usas en Visual Studio? Se ve bastante interesante, y tengo ganas de cambiar un poco, pero encontrar fuentes monoespaciadas que sean bonitas a la vez que legibles es complicado. Gracias. 😉
Muchas gracias! La fuente si no recuerdo mal se llama Dank Mono.
Assets\Scripts\PlayerMovement.cs(31,168): error CS1513: } expected, auxilio me salen 7 errores igual a este que puede ser ??
El personaje puede realizar un salto de pared en mi caso, si choco con una pared y luego giro inmediatamente al lado contrario y salto se puede hacer de forma más o menos constante ¿Cómo podría arreglar eso?
literal este loco solo contesta comentarios de apoyo, si buscas que te conteste suerte.
pd: yo tengo el mismo problema y no se solucionarlo
Tengo un problema con los saltos dobles y es que el personaje si le pongo que saltos máximos dos salta indefinidamente y si le pongo 1 salta solo una vez
Me pasa lo mismo
alguien sabe porque al hacer el salto, la variable saltosRestantes hay ocaciones en q no disminuye 1 cuando se presiona la tecla, haciendo q el personaje de 1 salto de mas?
Es posible que la comprobación de que el personaje está tocando el suelo se esté haciendo en el primer frame del salto cuando el personaje esta tocando el suelo. Por esa razón el primer salto no cuenta y tendrías un salto más. Para solucionarlo habría que esperar unas décimas de segundo a que el personaje se separe del suelo para empezar a comprobar. En el vídeo del Slime hago algo parecido por si necesitas una referencia de cómo hacerlo. Un saludo!
de que vídeo hablas? tengo el mismo problema@@RocketJam
conseguiste arreglar tu problema? Me ocurre lo mismo.
Me ayudas mucho estoy en el celular de mi papá
Perdonar xo este sería el #005 del curso? Es que no lo pone en el título?
Gracias un saludo
tengo un problema,me da saltos infinitos, saben cual podria ser el problema?, lo tengo para que de solo 2 saltos pero da infinitos
Ase gurate que el personaje este en Default y que el script este en suelo
Hola, ¿Cuál es realmente la diferencia entre emitir un rayo y la caja para el control de la colisión con el suelo? ¿Qué beneficios tiene la caja?. Gracias por su tiempo.
Quizas tu personaje esta parado bien en la punta de una montaña (esta tocando el suelo con pocos pixeles), su raycast sale desde el centro del personaje entonces no tocaria suelo (ya que el centro del personaje efectivamente no esta sobre suelo). Sin embargo el box al tener el tamaño del personaje, si cualquier parte de los pies toca el suelo, reconocera que EstaEnSuelo.
Creo que va por ahi la explicacion
@@ProGustavo20 Muchas gracias, me resuelta muy útil su respuesta.
Para a los que no le aparese el physic materia 2d , es que en las nuevas verciones tienes que crear un asser y en 2d aparese para elegirlo
Gracias
Holaa Rocket tengo un problema , cuando cambio de scena el jugador salta bajo y me fijo si an cambiado los valores de fuerza de salto y demas y siguen igual, que seria?
Hola! Puedes mandarme tu código a través del formulario de contacto de mi página web www.rocketjam.dev/contacto así le puedo echar un ojo e intentar ayudarte. Un saludo!
Hola, en lo de que no de doble salto, cuando termino y guardo me sale error CS1022:Type or namespace definition, or end-of file expected. Y tampoco me deja probarlo ni cambiar lo de la capaSuelo desde la propiedad del script. ¡Por favor, que alguien me ayude!!
hola te digo nose si aun tendras el problema pero a mi me sucedia lo mismo y este es el script que tengo y me sirve
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class caractercontroler : MonoBehaviour
{
public float velocidad;
public float fuerzasalto;
public float SaltosMaximos;
public LayerMask Capasuelo;
public caractercontroler(LayerMask capasuelo)
{
Capasuelo = capasuelo;
}
private new Rigidbody2D rigidbody;
public Rigidbody2D Rigidbody { get => rigidbody; set => rigidbody = value; }
private BoxCollider2D boxCollider;
private float SaltosRestantes;
private bool mirandoDerecha = true;
private void Start()
{
Rigidbody = GetComponent();
boxCollider = GetComponent();
SaltosRestantes = SaltosMaximos;
}
// Update is called once per frame
void Update()
{
ProcesarMovimiento();
ProcesarSalto();
}
bool EstaenSuelo()
{
RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, Capasuelo);
return raycastHit.collider != null;
}
void ProcesarSalto()
{
if (EstaenSuelo())
{
SaltosRestantes = SaltosMaximos;
}
if (Input.GetKeyDown(KeyCode.Space) && SaltosRestantes > 0)
{
SaltosRestantes--;
rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f);
Rigidbody.AddForce(Vector2.up * fuerzasalto, ForceMode2D.Impulse);
}
}
void ProcesarMovimiento()
{
// Logica de Movimiento.
float InputMovimiento = Input.GetAxis("Horizontal");
Rigidbody.velocity = new Vector2(InputMovimiento * velocidad,
Rigidbody.velocity.y);
GestionarOrientacion(InputMovimiento);
}
void GestionarOrientacion(float InputMovimiento)
{
// Si se cumple condicion
if ((mirandoDerecha == true && InputMovimiento > 0) || (mirandoDerecha == false && InputMovimiento < 0))
{
// Ejecutar codigo volteando
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
espero y te sirva
Ok gracias, deje de hacer el 2d y estoy probando 3d pero muchas gracias, para otro juego me servira
Algo tarde, pero tengo un problema el cual es que el doble salto no es constante, me explico, dentro de unity cuando le marco que el maximo de saltos es 2, en un inicio funciono, pero a lo largo que seguia escribiendo codigo, cada vez que probaba o no funcionaba, o funcionaba pero luego dejaba de dar soble salto, se soluciono al marcar con 3 salto maximos, saltaba sin problemas, pero habeces podias dar 3 saltos
En resumen, como hago que el doble salto sea constante y no tardio?
ayuda, caudno hago todo no me sale la opcion para cambiar o asignar la capasuelo(si puedo editar la velocidad y la fuerza de salto pero esta no)
Hola Antonio! Tengo un problema con el salto! realmente funciona a la perfección lo que enseñaste, y el código esta bien! Solo que al parecer por lo que comprendo la caja es demasiado grande y eso hace que la función detecte el suelo sin siquiera tocarlo, incluso copiando tu código a la perfección pasa, como hago para cambiar el diámetro de la caja?
Hola! Puedes editar el tamaño del BoxCollider desde el inspector de Unity. Hay un botón que habilita la edición y luego lo puedes modificar en la escena como si se tratase de una caja en Photoshop. Un saludo!
¿soy el único que tiene un bug que simplemente, por ejemplo hago el primer o salto o el doble salto y no puede saltar mas? ¿alguien sabe como puedo solucionarlo?
Aun necesitas ayuda?
a mi directamente ya no me deja hacer el primer salto
Hola, bastante tarde la pregunta pero hace poco comencé a ver tus videos, cuando el personaje salta hace el boble salto, pero si llega a alguna parte como el techo del nivel o una plataforma flotante, puedo saltar infinitamente en el techo, creo que es por el boxcollider que detecta el techo como suelo y produce ese efecto, ¿Se puede solucionar?
Cambia la Collision Detection de "Discrete" a "Continous" del RigidBody 2D del Personaje
Hermano, eres un grande, no se exactamente el porque funciona, pero lo hace, asi que gracias
No logro hacer funcionar correctamente la comprobación de si está en el suelo. Me arroja falsos positivos que provocan diversos bugs en el salto: a veces permite triple y hasta cuádruple salto de forma aleatoria, si te pegas a las paredes permite saltos infinitos, etc.
Pero lo más preocupante es que al llegar al vídeo del slime, no funciona la parte de empujarte lejos del enemigo, nada más darte el impulso (y estando en el aire) la función EstaEnSuelo devuelve un falso positivo y me devuelve a puedeMoverse=true :(
He vuelto a repasar los boxcolliders del personaje, la capa suelo, todo... y todo está bien.
Lo único, estoy en unity 2022 no sé si habrá cambiado algo del procesamiento de físicas o colisiones.
A mi también me está pasando lo del salto caminando contra una pared. Con un Debug.Log pude ver que no siempre se reduce el salto máximo y creo que es por el raycast que es con un box
copie el código igual pero me sale...Assets\Scripts\Character_control.cs(26,10): error CS0161: 'CharacterControl.EstaEnSuelo()': not all code paths return a value... no se porq puede ser
Al utilizar fisicas no habria que usar fixedUpdate?
esta bueno gracias el tercer "bug" para mi no es un bug por que quiero hacer un Megaman X
Hola Rocket, de verdad necesito tu ayuda tengo un error y no se como arreglarlo
Hola! Puedes mandarme tu código a través del formulario de contacto de mi página web www.rocketjam.dev/contacto así le puedo echar un ojo e intentar ayudarte. Un saludo!
El primero en comentar jeje
Una cosa podras explocar como hacer que si tienes otro tipo de arma quite mas vida o se tompa mas rapido ?
Explicar* rompa* tipo los comandos
Armas con distintos stats? Suena interesante, me lo apunto :)
Tengo un problema, hice todo igual y anda todo genial, pero cuando camino aveces el personaje se queda pillado y tengo que saltar para que siga caminando 😢
Me pasa que cuando realizo los dos saltos ya despues no puedo saltar mas
El codigo es este:
public class Character_controller : MonoBehaviour
{
public float Velocidad;
public float Fuerza_del_salto;
public int SaltosMaximos;
private new Rigidbody2D rigidbody;
private bool mirando_derecha;
private BoxCollider2D Boxcollider;
private LayerMask Capasuelo;
private int SaltosRestantes;
// Start is called before the first frame update
void Start()
{
Boxcollider = GetComponent();
rigidbody = GetComponent();
SaltosRestantes = SaltosMaximos;
}
// Update is called once per frame
void Update()
{
movimiento();
Salto();
}
void movimiento(){
float Input_movimiento = Input.GetAxis("Horizontal");
rigidbody.velocity = new Vector2 (Input_movimiento * Velocidad, rigidbody.velocity.y);
Gestionar_posicion(Input_movimiento);
}
bool Estar_en_suelo()
{
RaycastHit2D raycasthit = Physics2D.BoxCast(Boxcollider.bounds.center, new Vector2 (Boxcollider.bounds.size.x,Boxcollider.bounds.size.y), 0f, Vector2.down, 0.2f, Capasuelo);
return raycasthit.collider != null;
}
void Salto(){
if (Input.GetKeyDown(KeyCode.Space) && SaltosRestantes > 0){
SaltosRestantes--;
rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f);
rigidbody.AddForce(Vector2.up*Fuerza_del_salto, ForceMode2D.Impulse);
}
if(Estar_en_suelo()){
SaltosRestantes = SaltosMaximos;
}
}
void Gestionar_posicion (float Input_movimiento){
if ((mirando_derecha == true && Input_movimiento > 0) || (mirando_derecha == false && Input_movimiento < 0) ){
mirando_derecha = !mirando_derecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
Hola, lo pudiste resolver? la verdad a mi me pasa lo mismo y no se que hacer :,(
asegúrate de que en capa suelo este la capa "suelo". de lo contrario no te dejara volver a saltar
holaaa...
ya realize el codigo y sigue saltando muchas veces y no se que aser mando mi codigo
public class mover : MonoBehaviour
{
public float velocidad;
public float fuerzaSalto;
public LayerMask capasuelo;
private BoxCollider2D boxCollider;
private Rigidbody2D RigidBody;
private bool mirandoDerecha = true;
private void Start()
{
RigidBody = GetComponent();
boxCollider = GetComponent();
}
// Update is called once per frame
void Update()
{
ProcesarMovimiento();
prosesarsalto();
}
bool EstaEnElSuelo()
{
RaycastHit2D raycastHit= Physics2D.BoxCast(boxCollider.bounds.center, new Vector2( boxCollider.bounds.size.x-0.1f,boxCollider.bounds.size.y-0.1f),0f ,Vector2.down,0.2f,capasuelo);
return raycastHit . collider != null;
}
void prosesarsalto()
{
if( Input.GetKeyDown(KeyCode. Space ) && EstaEnElSuelo ( ) )
{
RigidBody.AddForce( Vector2.up*fuerzaSalto,ForceMode2D.Impulse);
}
}
void ProcesarMovimiento()
{
float inputMovimiento = Input.GetAxis("Horizontal");
RigidBody.velocity = new Vector2(inputMovimiento * velocidad, RigidBody.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputmovimiento)
{
//Si se cumple condicióm
if ((mirandoDerecha == true && inputmovimiento < 0) || (mirandoDerecha == false && inputmovimiento > 0))
{
//Ejecutar codigo de volteado
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
me pasa lo mismo si lo lograste resolver me dices? es que estoy en las mismas
@@Raged0riginal yo igual y no se como solucionar
el código esta bien pero igual sigo saltando jaja ya borre el código, lo volví a escribir y sigue igual, tratare mañana de ver si lo logro solucionar o usare el código de salto de alguien mas, si es que funciona o tratare de escribirlo por mi cuenta. les aviso cuando lo logre solucionar 😊😊😊😊
No se pudo?
¿Cómo ago para que mi personaje no salga volando?
tutorial muy bueno, pero a veces me da un error que dice: NullReference, algo asi, y no se porque me da ese error
Buenas! Asegúrate de que tienes todas las variables públicas asignadas desde el inspector.
Un saludo!
Una pregunta, como has puesto el desigual (el igual con una raya en medio)
Se escribe != a mi me sale el símbolo del igual con una raya en medio por la fuente que tengo configurada. Un saludo!
Tiren paro me quede en el segundo 11:54 y mi codigo esta igual, pero a mi da error y pone "error CS0161: 'PlayerMove.EstaEnSuelo()': not all code paths return a value"
Hola, que tal? No se si responderas por el tiempo que tiene el video pero por si acaso comento, tengo un detalle que hice todo al pide de la letra como el video pero el personaje no salta, y eso empezó a suceder cuando agregre el codigo de box.cast para que solo realizara saltos cuando hicers contanto en el suele. Tambien hice layer y suelo @RocketJam
Yo tenia el mismo error, pense que hice todo igual al video, pero me olvide de poner el "boxCollider = GetComponent();" en el "void Start()"
Mi personaje cuando salta y toca con un bloque se queda como trepado o pegado a ese bloque en vertical o en el aire, y la verdad no se porque pasa eso
tengo un problema que no lo puedo resolver de niguna forma, cuando paso la variable a capaSuelo); y lo guardo, en Unity no me aparece para seleccionar la capa y lo volvi a reescribir otra vez al script y no consigo que aparezca
Por alguna razón, terminé de ver el video unas 3 veces y sigo sin poder saltar en mi juego, ya revisé todo el código y ya hice todo lo que hiciste en el video y ahora no puedo saltar ni una sola vez, antes podía muchísimas veces, ahora no, ayuda, por favor.
Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
public float fuerzaSalto;
public float Velocidad;
public int saltosMaximos;
public LayerMask capaSuelo;
private bool mirandoDerecha = true;
private Rigidbody2D personajeRigid;
private BoxCollider2D boxCollider;
private Collider2D personajeCollider;
private float saltosRestantes;
// Start is called before the first frame update
private void Start()
{
personajeRigid = GetComponent();
boxCollider = GetComponent();
saltosRestantes = saltosMaximos;
}
// Update is called once per frame
void Update()
{
moverPersonaje();
salto();
}
bool EstaEnSuelo()
{
RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capaSuelo);
return raycastHit.collider != null;
}
void moverPersonaje()
{
float inputMovimiento = Input.GetAxis("Horizontal");
personajeRigid.velocity = new Vector2(inputMovimiento * Velocidad, personajeRigid.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputMovimiento)
{
if( (mirandoDerecha == true && inputMovimiento < 0) || (mirandoDerecha == false && inputMovimiento > 0))
{
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
void salto ()
{
if (EstaEnSuelo())
{
saltosRestantes = saltosMaximos;
}
if (Input.GetKeyDown(KeyCode.Space) && saltosRestantes > 0)
{
saltosRestantes--;
personajeRigid.velocity = new Vector2(personajeRigid.velocity.x, 0f);
personajeRigid.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse);
}
}
}
Pudiste solucionarlo?
En el scrip no hay problema, ummm le diste valor del saltos maximos en el inspector del personaje, umm en tu caso player Scrip y le atribuiste la capa suelo, que creaste de la plataforma? creo que de hay parte tu problema , codigo no es, suerte
Intenta reiniciar el editor de unity capaz que funcione
bro hola una pregunta puedes poner lo de programacion para que saltes en un mensaje?
buenass, una consulta, como se hace en visual studio el = tachado que hace rocket jam en el minuto 12:31? Saludos!!!
Ese creo que es el operador de diferencia `!=` el cual aparentemente el tema de Visual Studio que usa rocket jam seguramente lo cambia para que se vea así
Realmente se necesita tanto código sólo para saltar y no se puede utilizar un if?
12:33 como se pone el igual tachado?
!=
cuando le doy a play mi personaje sale volando hacia arriba
yeeeey
Hola, no me aparece el physics Material 2D, solo me aparece el normal physics Material, por favor ayudame
tengo el problema que los saltos no se me resetean al tocar el suelo y que cuando se acaba sigue saltando igual hasta que no toque el suelo que hice mal? llevo 2 horas buscando
sing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterController : MonoBehaviour
{
public LayerMask capasuelo;
public float velocidad;
public float fuerzaSalto;
public int saltoMaximos;
private Rigidbody2D rigidbody;
private bool mirandoDerecha = true;
private BoxCollider2D boxCollider;
private int saltoRestantes;
private void Start()
{
rigidbody = GetComponent();
boxCollider = GetComponent();
saltoRestantes = saltoMaximos;
}
// Update is called once per frame
void Update()
{
ProcesarMovimiento();
ProcesarSalto();
}
bool EstaenSuelo()
{
RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capasuelo);
return raycastHit.collider != null;
}
void ProcesarSalto()
{
if (EstaenSuelo())
{
saltoRestantes = saltoMaximos;
}
if (Input.GetKeyDown(KeyCode.Space) && saltoRestantes > 0)
{
saltoMaximos--;
rigidbody.velocity = new Vector2(rigidbody.velocity.x, 0f);
rigidbody.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse);
}
}
void ProcesarMovimiento()
{
// Logica de movimiento.
float inputMovimiento = Input.GetAxis("Horizontal");
rigidbody.velocity = new Vector2(inputMovimiento * velocidad, rigidbody.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputMovimiento)
{
//Si se cumple condicion
if((mirandoDerecha == true && inputMovimiento < 0) || (mirandoDerecha == false && inputMovimiento > 0))
{
//Ejecutar codigo de volteado
mirandoDerecha = !mirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
Ya lo resolviste?
@@Gabo_CG creo que no
Chale en dos tutoriales y de dos formas distintas he probado, pero el personaje nomás no salta, solo se mueve hacia los lados
a alguien también le pasa que cuando le da a saltar en vez de 2 saltos puede hacer 3?
A mí me pasaba, lo solucione ajustando la distancia de la caja(el 4to parámetro del método BoxCast), ya que para mí caso 0.2 era mucho
@@jevijarko yo pense q tambien podria ser eso y le fui ajustando pero llego el punto en q ya estando en el suelo no me restauraba los saltos como si aun estuviera en el aire y pense q no era eso...
Hola que extension usas en vs para que te autocorrija los errores o que te autocomplete las palabras
mira el video de alva majo de problemas habituales con unity, o algo haci de llamaba el video
Alguien ayuda:
En la parte de: "return raycastHit.collider != null;" me dice que raycastHit no existe y tampoco me deja poner "bool EstarEnSuelo()"
Hola ya encontraste la solución? Porque a mi me aparece lo mismo y tube que borrar todo y escribir de nuevo, pero igual me salta eso, y no se como solucionarlo
@@pacojc1897 simplemente ve a la descripcion del video, ahi esta para descargar todo el codigo
ALGUIEN ME PUEDE DECIR PORQUE EL PERSONAJE NO PUEDE SALTAR?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class script : MonoBehaviour
{
public float velocidad;
public float fuerzaSalto;
public float saltosMaximos;
public LayerMask capaSuelo;
private Rigidbody2D rigidbody;
private BoxCollider2D boxCollider;
private bool MirandoDerecha = true;
private float saltosRestantes;
private void Start()
{
rigidbody = GetComponent();
boxCollider = GetComponent();
saltosRestantes = saltosMaximos;
}
// Update is called once per frame
void Update()
{
ProcesarMovimiento();
ProcesarSalto();
}
bool EstaEnSuelo()
{
RaycastHit2D raycastHit = Physics2D.BoxCast(boxCollider.bounds.center, new Vector2(boxCollider.bounds.size.x, boxCollider.bounds.size.y), 0f, Vector2.down, 0.2f, capaSuelo);
return raycastHit.collider != null;
}
void ProcesarSalto()
{
if(EstaEnSuelo())
{
saltosRestantes = saltosMaximos;
}
if (Input.GetKeyDown(KeyCode.Space) && saltosRestantes > 0)
{
saltosRestantes = saltosRestantes -1;
rigidbody.AddForce(Vector2.up * fuerzaSalto, ForceMode2D.Impulse);
}
}
void ProcesarMovimiento()
{
//Logica de movimiento
float inputMovimiento = Input.GetAxis("Horizontal");
rigidbody.velocity = new Vector2(inputMovimiento * velocidad, rigidbody.velocity.y);
GestionarOrientacion(inputMovimiento);
}
void GestionarOrientacion(float inputMovimiento)
{
//Si cumple condicion
if((MirandoDerecha == true && inputMovimiento < 0) || (MirandoDerecha == false && inputMovimiento > 0))
{
//Ejecutar codigo volteado
MirandoDerecha = !MirandoDerecha;
transform.localScale = new Vector2(-transform.localScale.x, transform.localScale.y);
}
}
}
verifica la gravedad, masa y fuerza de salto en el script del personaje en unity
Buenas tengo un problema que siempre me hace un salto de más y no puedo poner que solo haga uno
Ayudaa, termine de escribir el codigo, pero me sale una advertencia que dice "Argumment 6: cannot from "float" to "int" por favor ayudaaa
el personaje, al colisionar con las paredes también recupera ese doble salto, me gustaría que solo tenga la posibilidad de recuperar los saltos restantes solo cuando toca el suelo...
Puedes dibujar los tiles de la pared y del suelo en distintas capas y ponerles la etiqueta de Suelo solo a los del suelo. Así el personaje solo recuperará los saltos al tocar el suelo.
Un saludo!
@@RocketJam pero cuando coliciona por debajo de un bloque flotante ,recupero el maximo antes tocar piso y se hace infinito por otro lado te felicito, buen temple para explicar Gracias y no dejes de subir videos
Assets\scrits\personaje.cs(28,40): error CS1003: Syntax error, ',' expected
alguien sabe como solucionarlo?
hola! espero que puedas responderme pero sabes que me da un error cuando termino todo el codigo de este video, me queda en rojoEstaEnSuelo y no me deja hacer nada despues en unity, espero que tengas una respuesta, gracias! ya me suscribi y le di like a todos los videos, estoy siguiendolo desde el inicio.
estoy en el mismo dilema, sin contar que el símbolo es distinto no lo reconoce como valido.
@@indecid sabes que lo solucione de alguna manera no sé cómo exactamente jajaja pero después te paso el código
@@maikondemaik jajaja no te preocupes, ya lo solucioné. más abajo otro usuario, pone que el equivalente seria !=, Y yo quede con cara de plato.
Hola, me puedes ayudar?
A veces no me resta un salto
a mi no me funciona no el salto , me sale que la linea donde dice : rigidBody.velocity = new Vector2(); esta mal pero esta exactamente igual
:(
Y para colocarle una animación de salto?