Zoeken…
Laaggebruik
Unity-lagen zijn vergelijkbaar met tags, omdat ze kunnen worden gebruikt om objecten te definiëren waarmee interactie moet plaatsvinden of die zich op een bepaalde manier moeten gedragen. Lagen worden echter voornamelijk gebruikt met functies in de klasse Physics
: Unity Documentation - Physics
Lagen worden voorgesteld door een geheel getal en kunnen op deze manier aan de functies worden doorgegeven:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
Als u op deze manier een laag gebruikt, worden alleen Colliders opgenomen waarvan GameObjects de laag heeft die in de berekeningen is opgegeven. Dit maakt verdere logica eenvoudiger en verbetert de prestaties.
Laagmaskerstructuur
De LayerMask
structuur is een interface die bijna exact hetzelfde werkt als het doorgeven van een geheel getal aan de betreffende functie. Het grootste voordeel is echter dat de gebruiker de betreffende laag kan selecteren in een vervolgkeuzemenu in de infovenster.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
Het heeft ook meerdere statische functies waarmee laagnamen kunnen worden geconverteerd naar indices of indices naar laagnamen.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
Om het controleren van lagen gemakkelijk te maken, definieert u de volgende uitbreidingsmethode.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Met deze methode kunt u controleren of een gameobject zich in een laagmasker bevindt (geselecteerd in de editor) of niet.