unity3d
Skikten
Sök…
Skiktanvändning
Enhetslager liknar taggar som att de kan användas för att definiera objekt som ska interageras med eller bör uppträda på ett visst sätt, men lager används dock huvudsakligen med funktioner i klassen Physics
: Enhetsdokumentation - Fysik
Lager representeras av ett heltal och kan skickas till funktionerna på detta sätt:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
Att använda ett lager på detta sätt kommer endast att innehålla Colliders vars GameObjects har det lager som anges i beräkningarna. Detta gör ytterligare logik enklare och förbättrar prestanda.
LayerMask Structure
LayerMask
strukturen är ett gränssnitt som fungerar nästan exakt som att skicka ett heltal till den aktuella funktionen. Dess största fördel är att låta användaren välja det aktuella lagret från en rullgardinsmeny i inspektören.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
Det har också flera statiska funktioner som gör det möjligt att konvertera lagernamn till index eller index till lagernamn.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
För att göra Layer-kontroll enkelt kan du definiera följande förlängningsmetod.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Med den här metoden kan du kontrollera om ett spelobjekt finns i en layermask (vald i redigeraren) eller inte.