Unity ofrece un motor físico propio, así como otras soluciones que ayudan a controlar el movimiento de los agentes, como el controlador de personajes.
Esta lección está muy relacionada con la de movimiento automático (los NPCs se mueven automáticamente, e incluso a veces los personajes del jugador también, por ejemplo en un juego de movimiento point and click).
Proyeccción de rayos
Una técnica muy útil para anticiparnos a las colisiones o detectar proximidad es la proyección de rayos (Physics.Raycast). Lo más básico es establecer un punto de inicio y una dirección en la que proyectar: Physics.Raycast(transform.position, transform.forward)
Si se quiere evitar detectar disparadores (triggers) que no suelen ser obstáculos sólidos hay que incluir QueryTriggerInteraction.Ignore así:
Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Ignore)
Capas
Cuando se usan técnicas para anticiparnos a las colisiones como la proyección de rayos o el solapamiento de esferas (Physics.OverlapSphere), se trabaja con máscaras de capas. Esto permite, por ejemplo, ignorar todos los objetos del juego salvo aquellos que pertenecen a una o varias capas determinadas.
Si por ejemplo quieres que la proyección de rayos sólo detecte el suelo podrías tener esta variable (para que selecciones la capa «Ground» en el inspector):
public LayerMask groundLayer
Y luego usas esa máscara al hacer el raycast:
Physics.Raycast(ray, out hit, Mathf.Infinity, groundLayer.value)
¡Cuidado con los diferentes métodos que tiene LayerMask!, ya que algunos como NameToLayer reciben una cadena de caracteres y devuelven únicamente el índice de esa capa, y otros como GetMask reciben una o varias cadenas de caracteres y devuelven la máscara de capa (esos 32 bits que indican si hay que considerar o no cada una de las 32 capas que admite Unity), que es lo que sueles querer usar.
Más información
Para complementar es recomendable consultar otros documentos:
- HeartGameDev: How to Move Characters in Unity 3D | Character Controllers Explained. iHeartGameDev, YouTube (2021)
- Unity: Physics
- Smart Penguins: Unity Physics: Static, Kinematic, Dynamic. Smart Penguins, YouTube (2020), explicación del movimiento en Unity
- Sunny Valley Studio. Dynamic, Kinematic Rigidbody or Transform? – How to move objects in Unity 2D P1 Sunny Valley Studio. YouTube (2022), explicación del movimiento en Unity
- Sunny Valley Studio. How to use Context Steering AI in Unity – P1 Overview Sunny Valley Studio. YouTube (2023), explicación del comportamiento de dirección contextual. El artículo original es este.
Esta página está licenciada bajo CC BY-NC-SA 4.0 por Laboratorios Narratech.