Mejora el control de colisiones, construye escenarios reutilizables y programa un Player Controller sólido en C# sin perder rendimiento. Aquí verás por qué combinar colliders es una solución práctica, cuándo evitar edge collider 2D y cómo organizar métodos y variables en Unity para trabajar con claridad desde el primer día.
¿Cómo combinar colliders para formas complejas en Unity?
Cuando una forma no encaja con un único collider (caja, cápsula o círculo), la solución eficaz es combinarlos. Una roca irregular puede requerir dos colliders distintos para aproximar su volumen. Es una simplificación que evita calcular medio millón de polígonos y mejora el detalle de colisión por partes.
Combinar varios colliders en un mismo objeto es válido y estable.
Úsalo para formas orgánicas o personajes complejos.
Ejemplo mental: piernas y brazos con cápsulas, cabeza con esfera, torso con cápsula.
Mantiene el rendimiento y mejora la precisión de contacto.
¿Cuándo usar o evitar edge collider 2D?
El edge collider 2D es solo una línea: no define interior ni exterior. Por eso no es sólido como caja, cápsula o círculo, y puede permitir que parte de un GameObject atraviese el otro si no se configura con cuidado.
Característica: trazo lineal sin volumen interior.
Riesgo: penetraciones y configuraciones más complejas.
Recomendación: usar solo para casos muy superficiales o con mucha experiencia.
Preferible: colliders sólidos cuando necesites colisiones fiables.
¿Cómo crear el Player Controller en C# y configurar métodos y variables?
Antes de programar, deja solo el protagonista y una plataforma para que no caiga por la física. Crea el script en la carpeta Scripts: botón derecho > Create > C# Script y nómbralo “Player Controller”. Unity genera la estructura base con using, clase pública que hereda de MonoBehaviour y los métodos Start y Update.
Consejo de rendimiento: en Update evita código pesado para no perder frames.
Editor de código: usa Visual Studio u otro editor que prefieras.
Añadir el script al jugador: arrastra el archivo al objeto en la jerarquía o al inspector.
Verás las variables públicas editables en el inspector con nombres legibles por el parsing.
¿Qué estructura base crea Unity en un script de C#?
usingUnityEngine;publicclassPlayerController:MonoBehaviour{// Variables del movimiento del personajepublicfloat jumpForce =6f;// editable en el inspectorprivateRigidbody2D rigidBody;// componente de física 2DvoidStart(){// se ejecuta al iniciar el juego}voidUpdate(){// se ejecuta cada frame}voidJump(){// reproduce la animación de salto (sin retorno)}}
¿Cómo nombrar métodos y variables con camel case?
En C#, los métodos empiezan en mayúscula y siguen camel case: Jump. Las variables empiezan en minúscula: jumpForce. Un método void no devuelve valor; si devolviera datos, usarías tipos como boolean, int o float.
Métodos de Unity: Start y Update deben llamarse exactamente así.
Llaves: Visual Studio cierra automáticamente la llave de apertura.
Saltar: método sin parámetros cuando solo dispara una animación.
// Método sin retorno ni parámetrosvoidJump(){// lógica/animación de salto}
¿Cómo exponer parámetros y enlazar componentes en el inspector?
Las variables públicas se editan desde el inspector. Ejemplo: jumpForce como float con sufijo F para decimales. Para componentes existentes en el objeto (como el Rigidbody2D), usa una variable privada y evita nombres conflictivos.
Pública editable: valores ajustables sin reabrir el código.
Privada: datos internos como el rigid body del personaje.
Evita colisiones de nombres con miembros de MonoBehaviour. Cambia a rigidBody (B mayúscula) o playerRigidBody.
// Expuesta en el inspectorpublicfloat jumpForce =6f;// Interna y clara de leerprivateRigidbody2D rigidBody;// alternativa 1// private Rigidbody2D playerRigidBody; // alternativa 2
Asignación del script: arrastra el archivo al GameObject del jugador.
Lectura en el inspector: Unity separa “Jump Force” por parsing de mayúsculas.
Recuerda: usa Rigidbody2D en juegos 2D; el 3D no funciona en 2D.
¿Te gustaría ver más ejemplos de movimiento, salto y físicas en 2D? Deja tus preguntas o dudas en los comentarios y cuéntame qué te gustaría implementar después.
Compañeros algo que me paso con mientras hacia el código en Visual Studio fue el hecho que no reconoció el objeto Rigidbody2D en el intellisense
esto puede generar errores como por ejemplo escribir mal el nombre de la clase o de la librería de Unity, o no tener la documentación exacta de las clases u objetos que maneja, lo solucionan de esta forma:
En el menú de Visual Studio van a Herramientas -> Obtener Herramientas y características
Se le abrirá el instalador de VS Studio, cierren el VS para continuar
Seleccionen Desarrollo de juegos con Unity y luego hacen clic en modificar en la parte inferior derecha. El proceso tomara unos minutos.
En Unity, en el menú van a Editar -> Preferencias, al abrir el panel seleccionen la opción Herramientas Externas y busquen la opción Editor scripts externo
Por defecto les va aparecer Abrir por extensión de archivo cámbielo por Visual Studio Community
Al abrir el script nuevamente podrán observar que ahora si soporta los tipos de Unity con su documentación y demás en el intellisense.
Gran aporte crack!!!!
bro como accedo a las herramientas, no me aparece :(
La razón por la cual el Método "Start" y "Uptade" no se le puede cambiar de nombre es que son Event Funtions, que obtienes al heredar de Monobehaviour, estas sera cumplen su funcionamiento asociado al evento de esa función. Como lo sera "Start" [Ejecutarse una sola vez], "Update" [Ejecutarse en cada frame].
Existes muchas mas, como "Awake", "LateUpdate", "OnEnable"... entre otros.
Puedes saber mas sobre Event Funtions Aquí
Hola, tengo un inconveniente al tratar de asignarle a mi personaje el script, lo hago de las formas indicadas en el video pero me aparecen el siguiente mensaje:
“can´t add script behavior assemblyIfo. The script needs to drive from monobehaviour!”
tuve un problema similar, no se el motivo, pero rehice el script y se soluciono espero te ayude
Un consejo, la pantalla fondo blanco en programación cansa mucho la vista, usen algun tema de tipo dark mode!
Para la roca triangular no es necesario utilizar diferentes colliders por separado, en Unity del 2021 hay un collider llamado "Polygon Collider 2D" te hace las colisones perfectas para el sprite.
Otro nombre de variable normalmente para el rigidbody es "rb"
privateRigidbody2D rb;
Con la parte de los nombres de las variables es preferencia de cada quien, esto es una forma de hacerlo, solo tener en cuenta que los nombres de las variables debe describir su uso en el programa.
Es muy útil tener nombres cortos y ahorra bastante tiempo, pero se hace un poco complicado de recordar y leer para otras personas que no han escrito el código e interpretar su significado.
Visual Studio e puede conseguir gratis? o siempre es pago?
Hola, VS es pago, debes tener una licencia para poder usarlo, aveces da licencias gratis a estudiantes con convenios.
Hay una versión gratuita pero es muy lame con respecto a la profesional
hola, tengo un error al momento de generar lo de rigidBody2d porque al parecer no esta funcionando el monobeheaviour, osea no reconoce que es una clase de UnityEngine
¿Has comprobado que el nombre del fichero sea el mismo que el de la clase? En caso afirmativo, ¿puedes dejar el código para que podamos verlo?
Para el Collider de la roca me parece que es mucho mas practico utilizar Polygon Collider 2D se adapta perfectamente a la estructura de la roca
Otra forma en la que se pueden editar las variables sin hacerlas publicas y asi se evita que otros scripts puedan modificar la variable es utilizando SerializedField.
usingUnityEngine;publicclassPlayerController:MonoBehaviour{// Configurations params[SerializeField]float jumpForce =6f;Rigidbody2D rigidBody;Animator anim;// Start is called before the first frame updatevoidStart(){ anim =GetComponent<Animator>(); anim.SetBool("isOnTheGround",true); anim.SetBool("isAlive",true);}// Update is called once per framevoidUpdate(){if(Input.GetButtonDown("Jump")){ anim.SetBool("isOnTheGround",false);}if(Input.GetButtonUp("Jump")){ anim.SetBool("isOnTheGround",true);}}}
Usa SerializedField cuando tu variable sea privada y necesites acceder a ella
una Consulta los "metodos de la clase" siempre van en mayuscula???, no se pueden escribir en minuscula tambien??. Debido a que tambien las clases se escriben en mayuscula, igual que las constantes, nos llevaria a una confucion o no???..
Gracias
Claro que se puede, pero es un convención del lenguaje nombrar atributos, clases y métodos iniciando con mayúsculas. A esta estructura se le llama "PascalCase"
Tengo una duda lo de hacer que una variable se vea en el inspector no es mejor usando [SerializeField] por que no vamos a llamar a la variable afuera del script?
¿Existe algún problema si, utilizo Visual Studio Code?, o me recomienda usar Visual Studio?
No existe ningún problema si utilizas Visual Studio Code
Visual Studio Code se volvio en uno de los mejores editores de texto (por no decir el mejor) te servira para varios lenguajes y ademas te ayuda bastante con tu codigo
Me surge la duda de cómo es que siendo C#. Una variable no requiere ser declarada así:
public float jumpForce { get; set; } = 6f;
Y en cambio, usa perfectamente esta otra manera:
public float jumpForce = 6f;
¿Es algo con lo que trabaja Unity? ¿Cuál es la razón?
Genial
¿Por qué no utiliza un mesh collider? No se ajusta mejor o ¿cómo funciona?
Hola,me gustaría saber que programa usar para hacer los scripts,porque no tengo licencia de VisualStudio y no se como instalar Mono(Aparentemente este programa ya no se puede usar en Unity).