unity3d
Livelli
Ricerca…
Utilizzo dei livelli
I livelli Unity sono simili ai tag, in quanto possono essere utilizzati per definire oggetti che devono essere interagiti con o dovrebbero comportarsi in un certo modo, tuttavia, i livelli vengono principalmente utilizzati con le funzioni della classe Physics
: Unity Documentation - Physics
I livelli sono rappresentati da un numero intero e possono essere passati alle funzioni in questo modo:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
L'utilizzo di un layer in questo modo includerà solo Collider i cui GameObject hanno il layer specificato nei calcoli eseguiti. Ciò rende più semplice la logica e migliora le prestazioni.
Struttura LayerMask
La struttura LayerMask
è un'interfaccia che funziona quasi esattamente come passare un intero alla funzione in questione. Tuttavia, il suo più grande vantaggio è consentire all'utente di selezionare il livello in questione da un menu a discesa nell'ispettore.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
Dispone inoltre di più funzioni statiche che consentono di convertire i nomi dei livelli in indici o indici in nomi di layer.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
Per rendere più semplice il controllo dei livelli, definire il seguente metodo di estensione.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Questo metodo ti consentirà di verificare se un oggetto di gioco si trova in una maschera (selezionata nell'editor) o meno.