Les « LayerMask » dans Unity sont essentielles pour spécifier un ou plusieurs layers sur lesquels des actions spécifiques peuvent être appliquées. Vous pouvez les considérer comme des tableaux contenant des layers.
Table des matières
Utiliser les layers via l’inspecteur
Vous pouvez facilement utiliser les Layer Masks via l’inspecteur Unity :
using UnityEngine;
public class RaycastBehaviour : MonoBehaviour
{
public LayerMask layerMask;
public void RayCast()
{
if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, Mathf.Infinity, layerMask))
{
// Actions à effectuer avec l'objet touché
}
}
}
C’est grâce au LayerMask que vous pouvez définir facilement quels layers seront affectés par vos actions, comme le Raycast.
Créer un LayerMask par code
Vous pouvez également créer un LayerMask par code à l’aide de la fonction statique « GetMask » :
using UnityEngine;
public class RaycastBehaviour : MonoBehaviour
{
public LayerMask layerMask;
private void CreateLayerMask()
{
// Plusieurs layers
layerMask = LayerMask.GetMask(new string[] { "UI", "Default" });
// Un seul layer
layerMask = LayerMask.GetMask("UI");
// Tous sauf un
layerMask = ~LayerMask.GetMask("UI");
}
}
Récupérer un LayerMask avec tous les layers
Voici comment récupérer tous les layers:
int allLayers = Physics.AllLayers;
Récupérer l’index d’un layer
Si vous avez besoin de récupérer l’index d’un layer :
int indexLayer = LayerMask.NameToLayer("UI");
Convertir un index de layer en LayerMask
Vous pouvez convertir un index de layer en un LayerMask :
int indexLayer = LayerMask.NameToLayer("UI");
LayerMask layerMask = 1 << indexLayer;
Récupérer le nom d’un index de layer
Si vous souhaitez récupérer le nom d’un index de layer :
int indexLayer = LayerMask.NameToLayer("Default");
string nameLayer = LayerMask.LayerToName(indexLayer);
Ajouter / supprimer un layer par code
Vous pouvez ajouter ou supprimer des layers par code :
public LayerMask layerMask;
public void AddLayer(int layerIndex)
{
layerMask |= (1 << layerIndex);
}
public void RemoveLayer(int layerIndex)
{
layerMask &= ~(1 << layerIndex);
}
public void Example()
{
AddLayer(LayerMask.NameToLayer("UI"));
}
Savoir si un LayerMask contient un layer
Si vous devez savoir si un LayerMask contient un layer :
public LayerMask layerMask;
public bool Contains(int layerIndex)
{
return layerMask == (layerMask | (1 << layerIndex));
}
public void Example()
{
if (Contains(LayerMask.NameToLayer("UI")))
{
// Faites quelque chose
}
}
J’espère que cet article vous a été utile. Maintenant, vous avez les connaissances nécessaires pour gérer efficacement vos Layer Masks dans Unity.
Un conseil en plus, il serait plus propre de stocker toutes les fonctions dans un fichier d’extension.