SIGUE LA SERIE 👉🔴Cómo CREAR una ANIMACIÓN en Unity (𝐏𝐚𝐬𝐨 𝐚 𝐏𝐚𝐬𝐨!!) ➤ th-cam.com/video/HcHjlmrARuE/w-d-xo.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!
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
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!
@@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
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.
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
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 TH-cam y su adgorimo comienzé a recomendarte a más gente
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
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.
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??
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. 😉
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í?
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?
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
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 :(
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
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
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 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!
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 error y no se como solucionarlo y es que a veces el boxcast cuando salto pegado a la pared y llego al filo del suelo y vuelve a bajar el personage el boxcast devuelve el valor como si aun estuviese en el aire y no se porque 😭(utilizo otro metodo de salto y uso Time.deltaTime y fixedUpdate pero no tendria que afectar al boxcast)
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
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
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, ¿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
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?
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í
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
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
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); }
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);
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
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
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 😢
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! 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 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
oye una pregunta cuando yo algo la mecánica de doble salto no me sales porque en personaje sigue volado no se por que me pasa esto tu me puedes ayuda a resorbe este problema por favor
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 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.
me sale una cosa en la parte de script que dice, the assoclated script can not bi loaded.Pleas fix any compile errors and assign a valid script, como lo puedo arreglar?? ,12:04
Si cambiaste el nombre de tu script por que querias cuando ya hiciste todo el script el problema es ese, y si ya lo hiciste solamente entra al script, copialo completo, borra el antiguo script, crea un nuevo script en unity y pega todo el texto que copiaste
Por favor, necesito ayuda. He seguido los pasos del tutorial, y al llegar a la línea correspondiente al boxcast me da un error que no puedo solucionar. Me dice que el paréntesis final no es válido y lo he comprobado muchas veces con el video y lo he hecho igual. Por favor auidenme
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 me un error me dice " NullReferenceException: Object reference not set to an instance of an object" como lo puedo solucionar. Gracias crack me encantan tus tutoriales los puedo seguir sin tener ni idea.y como se escribe el igual no
Necesito ayuda el unity me dice un problema amarillo y dos rojos: el amarillo dice (al español xd) 'CharacterController.rigidbody' oculta el miembro heredado 'Component.rigidbody'. Usa la nueva palabra clave si intentas te intentas esconder. Y el rojo dice: el nombre 'ProcesarSalto' no existe en el contexto actual. Y el otro rojo dice: 'Input' no contiene una definición para 'GetkeyDown'. Nose pq no me deja ya revise el código como 4 veces y no veo nada raro necesito ayuda
Para el problema amarillo añade la palabra new antes de la clase Rigidbody en la declaración así: public new Rigidbody rigidbody; Para el problema de ProcesarSalto fíjate que el nombre del método cuando lo invocas sea exactamente igual que como lo has declarado, las mayúsculas son importantes. Para solucionar el último error solo tienes que escribir la K de Key en mayúscula. El método se llama Input.GetKeyDown() Espero haberte ayudado. Un saludo!
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"
¡Rocket! Tengo un pequeño problema, "'CharacterController.EstaEnSuelo()': not all code paths return a value" Seguí todo al pie de la letra, ¿Hice algo mal?
@@bnj5776 Realmente solo tienes que copiar con la precisión perfecta y seguir las instrucciones a la perfección, eso fue lo único que me ayudó. Si tienes problemas en la descripción hay un link al script.
@@techstorm.3461 ah si lo hice pero ya fue veo un video que enseñe ah implementarlo en unity y ahi nomas. che posta muchas gracias por tomarte el tiempo
SIGUE LA SERIE 👉🔴Cómo CREAR una ANIMACIÓN en Unity (𝐏𝐚𝐬𝐨 𝐚 𝐏𝐚𝐬𝐨!!)
➤ th-cam.com/video/HcHjlmrARuE/w-d-xo.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!
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
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 :)
El mejor canal donde puedes aprender a, usar Unity
*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
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.
Que padre me sorprende no a ver encontrado este canal antes
Este tipo de videos son oro. Gracias!!!
Gracias a ti!
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.
Gracias wey, te amo, no había podido configurar ese problema, enserio que muchas gracias. :D
Que gran tutorial, me has ayudado a quitar los saltos infinitos.Gracias
PD:Te has ganado un suscriptor nuevo 😁
Gracias a ti! :)
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
Te amo!!!!!!!!!!! tus videos son increíbles.
Muchas gracias! Me alegro de que te sean útiles :)
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
grax por el tuto crack yo hice el mismo codigo pero lo modifique para que solo se pueda dar 1 salto pq asi fuciona mi juego, grax :D
Buen contenido, enhorabuena por el canal. Me suscribo!
Muchas gracias! Bienvenido :)
hola buenas noches tendras el proyecto completo
podrías hacer un video enseñando a como crear un salto regulable? sos alto capo.
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
gracias master excelente tutorial
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
Buen video, muchas gracias
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
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 TH-cam y su adgorimo comienzé a recomendarte a más gente
Hola, ¿Podrías hacer un tutorial de como hacer que el personaje escale las paredes?
ya se iso el tutorial XD th-cam.com/video/2wbrHTfgvbs/w-d-xo.html
Si aprovechando Bugs XD
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
Muchas gracias por tan buenas explicaciones
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)
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.... 😁
A los que no le funciona el codigo 2024 escriban para ayudarlos!
Gracias por compartir
eres el mejor
ay un problema no se porque sigo saltando muchas veces y todo lo e echo bien ayuda gracias.
bien explicado, turoeial exelente
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.
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í?
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
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?
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
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 :)
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
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
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.
Perdonar xo este sería el #005 del curso? Es que no lo pone en el título?
Gracias un saludo
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 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!
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 error y no se como solucionarlo y es que a veces el boxcast cuando salto pegado a la pared y llego al filo del suelo y vuelve a bajar el personage el boxcast devuelve el valor como si aun estuviese en el aire y no se porque 😭(utilizo otro metodo de salto y uso Time.deltaTime y fixedUpdate pero no tendria que afectar al boxcast)
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
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()"
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!
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, ¿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.
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!
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
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
Me ayudas mucho estoy en el celular de mi papá
Al utilizar fisicas no habria que usar fixedUpdate?
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?
Assets\Scripts\PlayerMovement.cs(31,168): error CS1513: } expected, auxilio me salen 7 errores igual a este que puede ser ??
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
super util
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
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
bro hola una pregunta puedes poner lo de programacion para que saltes en un mensaje?
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
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
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
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
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
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 😢
12:33 como se pone el igual tachado?
!=
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
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 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!
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
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
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!
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
Ayudaa, termine de escribir el codigo, pero me sale una advertencia que dice "Argumment 6: cannot from "float" to "int" por favor ayudaaa
oye una pregunta cuando yo algo la mecánica de doble salto no me sales porque en personaje sigue volado no se por que me pasa esto tu me puedes ayuda a resorbe este problema por favor
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 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
es una f lo que esta al lado del 0 y 0.2 o es un signo? @Rocket Jam
si si es
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.
me sale una cosa en la parte de script que dice, the assoclated script can not bi loaded.Pleas fix any compile errors and assign a valid script, como lo puedo arreglar?? ,12:04
Si cambiaste el nombre de tu script por que querias cuando ya hiciste todo el script el problema es ese, y si ya lo hiciste solamente entra al script, copialo completo, borra el antiguo script, crea un nuevo script en unity y pega todo el texto que copiaste
Por favor, necesito ayuda. He seguido los pasos del tutorial, y al llegar a la línea correspondiente al boxcast me da un error que no puedo solucionar. Me dice que el paréntesis final no es válido y lo he comprobado muchas veces con el video y lo he hecho igual. Por favor auidenme
Checa si colocaste este simbolo al final: ";"
Ayuda no me funciona cuando pongo return raycastHit.colíder = null; que hago
Ayuda
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 me un error me dice " NullReferenceException: Object reference not set to an instance of an object" como lo puedo solucionar. Gracias crack me encantan tus tutoriales los puedo seguir sin tener ni idea.y como se escribe el igual no
Hola 👋 si quieres puedes mandarme tu código a través de la página de contacto de mi web rocketjam.dev/contacto
Cómo lo resolvieron jajaja
No enserio como lo isiste
Necesito ayuda el unity me dice un problema amarillo y dos rojos: el amarillo dice (al español xd) 'CharacterController.rigidbody' oculta el miembro heredado 'Component.rigidbody'. Usa la nueva palabra clave si intentas te intentas esconder. Y el rojo dice: el nombre 'ProcesarSalto' no existe en el contexto actual. Y el otro rojo dice: 'Input' no contiene una definición para 'GetkeyDown'. Nose pq no me deja ya revise el código como 4 veces y no veo nada raro necesito ayuda
Para el problema amarillo añade la palabra new antes de la clase Rigidbody en la declaración así:
public new Rigidbody rigidbody;
Para el problema de ProcesarSalto fíjate que el nombre del método cuando lo invocas sea exactamente igual que como lo has declarado, las mayúsculas son importantes.
Para solucionar el último error solo tienes que escribir la K de Key en mayúscula. El método se llama Input.GetKeyDown()
Espero haberte ayudado. Un saludo!
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
Buenas tengo un problema que siempre me hace un salto de más y no puedo poner que solo haga uno
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?
hola que lenguaje usas para programar
Hola! En Unity se utiliza el lenguaje C# para programar los scripts.
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"
Chale en dos tutoriales y de dos formas distintas he probado, pero el personaje nomás no salta, solo se mueve hacia los lados
Hola, me puedes ayudar?
A veces no me resta un salto
¿Cómo ago para que mi personaje no salga volando?
¡Rocket! Tengo un pequeño problema, "'CharacterController.EstaEnSuelo()': not all code paths return a value" Seguí todo al pie de la letra, ¿Hice algo mal?
uh yo también tengo ese problema, lo pudiste solucionar??
@@bnj5776 Sip, hace un buen rato.
@@techstorm.3461 uh que bueno, que hiciste?
@@bnj5776 Realmente solo tienes que copiar con la precisión perfecta y seguir las instrucciones a la perfección, eso fue lo único que me ayudó. Si tienes problemas en la descripción hay un link al script.
@@techstorm.3461 ah si lo hice pero ya fue veo un video que enseñe ah implementarlo en unity y ahi nomas. che posta muchas gracias por tomarte el tiempo