Buscar..
Uso de la capa
Las capas de Unity son similares a las etiquetas, ya que se pueden usar para definir objetos con los que se debe interactuar o se deben comportar de cierta manera; sin embargo, las capas se usan principalmente con funciones en la clase de Physics
: Documentación de Unity - Física
Las capas están representadas por un entero y se pueden pasar a las funciones de esta manera:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
El uso de una capa de esta manera incluirá solo Colisionadores cuyos GameObjects tengan la capa especificada en los cálculos realizados. Esto simplifica aún más la lógica y mejora el rendimiento.
Estructura LayerMask
La estructura LayerMask
es una interfaz que funciona casi exactamente como pasar un entero a la función en cuestión. Sin embargo, su mayor beneficio es permitir al usuario seleccionar la capa en cuestión de un menú desplegable en el inspector.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
También tiene múltiples funciones estáticas que permiten convertir nombres de capa en índices o índices en nombres de capa.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
Para facilitar la comprobación de la capa, defina el siguiente método de extensión.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Este método le permitirá verificar si un objeto de juego está en una tarea (seleccionada en el editor) o no.