Pequeños ajustes marcan gran diferencia. Aquí verás cómo corregir la detección de suelo con un raycast en superficies irregulares y cómo visualizar vida y maná privados con SerializedField para depurar mejor. Además, se identifica que no está contemplada la muerte del jugador cuando la vida llega a cero.
¿Cómo corregir el raycast de salto en Unity?
Un raycast demasiado corto puede fallar al detectar el suelo en rocas u objetos con colliders complejos. La solución práctica: exponer la distancia como variable y ajustarla desde el editor hasta encontrar el valor estable.
El valor fijo 1.5 no alcanza el suelo en rocas irregulares.
Pruebas rápidas: 1.6 y 1.7 aún fallan. 1.8 mejora. 2.0 y hasta 2.5 aseguran margen.
Beneficio: colisiones más inteligentes sin depender del collider exacto del suelo.
¿Qué pasos aplicar para el ajuste del raycast?
Crear una variable pública o serializada: jumpRayCastDistance.
Sustituir el 1.5 en Debug.DrawRay dentro de Update.
Sustituir el 1.5 en Physics2D.Raycast dentro del método que comprueba suelo.
Probar valores en tiempo de ejecución hasta que el personaje no se quede enganchado.
publicclassPlayerController:MonoBehaviour{[SerializeField]privatefloat jumpRayCastDistance =1.5f;voidUpdate(){// Visualiza el rayo hacia abajo con la distancia ajustable. Debug.DrawRay(transform.position, Vector2.down * jumpRayCastDistance, Color.red);}boolIsTouchingTheGround(){// Usa la misma distancia para la comprobación real.return Physics2D.Raycast(transform.position, Vector2.down, jumpRayCastDistance);}}
¿Cuándo conviene usar un Polygon Collider 2D?
Cuando un Box Collider no se ajusta bien a la forma, Polygon Collider 2D ofrece mejor precisión. Unity lo divide en fragmentos convexos para cálculos fiables.
Un polígono es convexo si la línea entre dos puntos queda dentro del contorno.
Mayor precisión implica más coste computacional que un cuadrado o un círculo.
Úsalo cuando la justicia del juego lo exija: colisiones “sentidas” como correctas.
Los hijos de un prefab en escena no siempre heredan cambios del padre: revisa y actualiza manualmente.
Incluso el personaje con Capsule Collider podría usar Polygon Collider, según necesidad.
¿Cómo visualizar vida y maná privados con SerializedField?
Si las variables son privadas y no aparecen en el editor, marca con SerializedField para inspeccionarlas sin exponerlas públicamente. Es ideal para depurar la barra de vida y el maná durante el gameplay.
Ventaja: ver valores en el editor sin romper el encapsulamiento.
Facilita validar cuánto daño recibe el jugador al contacto con enemigos.
publicclassPlayerController:MonoBehaviour{[SerializeField]privateint health;// puntos de vida visibles en el editor.[SerializeField]privateint mana;// puntos de maná visibles en el editor.}
¿Qué observar al probar el daño del enemigo?
Aumentar la velocidad del enemigo acelera la prueba del daño.
La barra de vida desciende golpe a golpe de forma visible.
Con SerializedField, se confirma la vida restante del jugador en el inspector.
¿Cómo gestionar la muerte del jugador al llegar a cero?
Actualmente, la vida puede bajar de cero y el juego sigue en marcha. No se activa ninguna lógica de muerte: el jugador permanece activo pese a tener valores negativos.
Estado detectado: la barra deja de cambiar y la vida interna sigue bajando bajo cero.
Falta contemplar el caso de muerte: detener control del jugador, feedback visual o reinicio.
Próximo paso: implementar la gestión de muerte tras alcanzar 0 de vida.
¿Te funcionó el ajuste de la distancia del raycast o preferiste Polygon Collider 2D? Comparte tus resultados, valores que te sirvieron y consejos para optimizar colisiones en tus niveles.
Corrección de Bugs en Colisiones y Vida de un Personaje en Videojuegos
No se por que pero los enemigos prefabricados puestos en un bloque prefabricado solo salen una vez, en el siguiente bloque del mismo tipo con enemigos, no salen!
podrian ayudarme, el juego hasta ahora me corre bien pero en consola me dice esto
NullReferenceException: Object reference not set to an instance of an object
UnityEditor.Graphs.Edge.WakeUp () (at C:/buildslave/unity/build/Editor/Graphs/UnityEditor.Graphs/Edge.cs:114)
Lo que yo hice para arreglar que el personaje toque el suelo fue colocar 2 raycast. Uno de cada lado del personaje. Así por lo menos "un pie" estaría en el suelo.
Esto también da mayor comodidad a la hora de brincar entre plataformas
Ojala pudiera publicarlo, pero ya al inicio se me superponen todos los menus (gamecanvas, menucanvas y gameOverCanvas).
No explicaron en el curso como solucionarlo :/
Si, pero tienen que subirlo con un nombre diferente, ¿Porque?
Porque ya tengo ese archivo con ese mismo nombre varias veces, y entonces a la hora de revisar los archivos crea confusiones porque no se sabe cual es cual.
tenia el bug de que los enemigos no se generaban correctamente, lo solucione en el enemy.cs, borrando el contenido de void start y en la parte final del codigo puse un else { return }, para que no tenga colisiones con las kill zone ni las exit zone
Ya me funcionó... Solo comente la linea del start en Enemy.cs