unity3d
Warstwy
Szukaj…
Wykorzystanie warstwy
Warstwy jedności są podobne do znaczników, ponieważ mogą być używane do definiowania obiektów, z którymi należy wchodzić w interakcje lub które powinny zachowywać się w określony sposób, jednak warstwy są używane głównie z funkcjami w klasie Physics
: Unity Documentation - Physics
Warstwy są reprezentowane przez liczbę całkowitą i mogą być przekazywane do funkcji w następujący sposób:
using UnityEngine;
class LayerExample {
public int layer;
void Start()
{
Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
}
}
Użycie warstwy w ten sposób obejmie tylko zderzacze, których GameObjects ma warstwę określoną w wykonanych obliczeniach. Ułatwia to dalszą logikę, a także poprawia wydajność.
Struktura warstwy
Struktura LayerMask
to interfejs, który działa prawie dokładnie tak, jak przekazywanie liczby całkowitej do danej funkcji. Jednak jego największą zaletą jest umożliwienie użytkownikowi wybrania danej warstwy z menu rozwijanego w inspektorze.
using UnityEngine;
class LayerMaskExample{
public LayerMask mask;
public Vector3 direction;
void Start()
{
if(Physics.Raycast(transform.position, direction, 35f, mask))
{
Debug.Log("Raycast hit");
}
{
}
Posiada również wiele funkcji statycznych, które pozwalają na konwersję nazw warstw na indeksy lub indeksów na nazwy warstw.
using UnityEngine;
class NameToLayerExample{
void Start()
{
int layerindex = LayerMask.NameToLayer("Obstacle");
{
}
Aby ułatwić sprawdzanie warstw, zdefiniuj następującą metodę rozszerzenia.
public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
bool result = (1 << @object.layer & layerMask) == 0;
return result;
}
Ta metoda pozwoli ci sprawdzić, czy obiekt gry znajduje się w masce warstwowej (wybranej w edytorze), czy nie.