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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow