Introduction et utilisation du composant Physics2DRaycaster (détection de rayons physiques 2D) de Unity UGUI
1. Qu'est-ce que le composant Physics2DRaycaster ?
Physics2DRaycaster est un composant UGUI dans Unity pour la détection de rayons physiques dans des scènes 2D. Il peut détecter la collision d'événements de souris ou tactiles sur des éléments d'interface utilisateur et transmettre les événements aux éléments d'interface utilisateur correspondants.
2. Le principe de fonctionnement de Physics2DRaycaster
Physics2DRaycaster détecte les collisions des éléments de l'interface utilisateur en émettant un rayon. Lorsqu'un rayon croise un élément de l'interface utilisateur, Physics2DRaycaster transmet l'événement à l'élément de l'interface utilisateur correspondant, lui permettant de répondre à l'entrée de l'utilisateur.
3. Attributs communs de Physics2DRaycaster
1. Masque d'événement
La propriété Event Mask est utilisée pour spécifier quelles couches d'éléments d'interface utilisateur peuvent recevoir des événements. Seuls les éléments de l'interface utilisateur du calque sélectionné peuvent recevoir des événements de détection de rayon.
2. Bloquer des objets
La propriété Objets bloquants est utilisée pour spécifier quels types d'objets bloqueront la détection des rayons. Vous pouvez choisir d'utiliser le composant Collider2D dans le système physique 2D ou d'utiliser la propriété Raycast Target de l'élément UI pour le blocage.
4. Fonctions communes de Physics2DRaycaster
1. Raycast
La fonction Raycast est utilisée pour effectuer la détection des rayons. Il accepte une liste de type RaycastResult comme paramètre et stocke les informations des éléments d'interface utilisateur détectés dans la liste.
2. Trier
La fonction Trier est utilisée pour trier les résultats de la détection des rayons. Il peut être trié en fonction de la distance, du niveau et d'autres attributs des éléments de l'interface utilisateur.
5. Exemple de code complet
1. Détecter les clics de souris sur les éléments de l'interface utilisateur
using UnityEngine;
using UnityEngine.EventSystems;
public class MouseClickExample : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Mouse clicked on UI element");
}
}
Pas:
- Créez un élément d'interface utilisateur (par exemple Button).
- Attachez le script MouseClickExample à l'élément d'interface utilisateur.
- Cliquez pour lancer le jeu, cliquez sur l'élément de l'interface utilisateur et la console affichera "La souris a cliqué sur l'élément de l'interface utilisateur".
Précautions:
- Assurez-vous que la propriété Raycast Target de l'élément d'interface utilisateur est cochée.
2. Détecter les événements tactiles
using UnityEngine;
using UnityEngine.EventSystems;
public class TouchExample : MonoBehaviour, IPointerDownHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Touch event on UI element");
}
}
Pas:
- Créez un élément d'interface utilisateur (par exemple, une image).
- Attachez le script TouchExample à l'élément d'interface utilisateur.
- Cliquez pour lancer le jeu, touchez l'écran sur l'élément de l'interface utilisateur, la console affichera "Événement tactile sur l'élément de l'interface utilisateur".
Précautions:
- Assurez-vous que la propriété Raycast Target de l'élément d'interface utilisateur est cochée.
3. Détecter les événements mouseover
using UnityEngine;
using UnityEngine.EventSystems;
public class MouseHoverExample : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("Mouse entered UI element");
}
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("Mouse exited UI element");
}
}
Pas:
- Créez un élément d'interface utilisateur (par exemple, texte).
- Attachez le script MouseHoverExample à l'élément d'interface utilisateur.
- Cliquez pour lancer le jeu, passez la souris sur l'élément de l'interface utilisateur, la console affichera "Élément de l'interface utilisateur saisi par la souris". Déplacez la souris hors de l'élément d'interface utilisateur et la console affichera "Mouse exited UI element".
Précautions:
- Assurez-vous que la propriété Raycast Target de l'élément d'interface utilisateur est cochée.
4. Détecter l'événement de glissement de la souris
using UnityEngine;
using UnityEngine.EventSystems;
public class MouseDragExample : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("Mouse drag started on UI element");
}
public void OnDrag(PointerEventData eventData)
{
Debug.Log("Mouse dragging on UI element");
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("Mouse drag ended on UI element");
}
}
Pas:
- Créez un élément d'interface utilisateur (par exemple, une image).
- Attachez le script MouseDragExample à l'élément d'interface utilisateur.
- Cliquez pour lancer le jeu, maintenez le bouton gauche de la souris enfoncé et faites glisser sur l'élément de l'interface utilisateur, la console affichera "Le glissement de la souris a commencé sur l'élément de l'interface utilisateur". Pendant le processus de glissement, la console affichera "Mouse dragging on UI element". Relâchez le bouton gauche de la souris et la console affichera "Glisser la souris terminé sur l'élément de l'interface utilisateur".
Précautions:
- Assurez-vous que la propriété Raycast Target de l'élément d'interface utilisateur est cochée.
5. Détecter les événements de la molette de la souris
using UnityEngine;
using UnityEngine.EventSystems;
public class MouseScrollExample : MonoBehaviour, IScrollHandler
{
public void OnScroll(PointerEventData eventData)
{
float scrollDelta = eventData.scrollDelta.y;
Debug.Log("Mouse scrolled on UI element: " + scrollDelta);
}
}
Pas:
- Créez un élément d'interface utilisateur (par exemple, barre de défilement).
- Attachez le script MouseScrollExample à l'élément UI.
- Cliquez pour lancer le jeu, faites défiler la molette de la souris, la console affichera "Mouse scrolled on UI element: ", et affichera la valeur scrollée.
Précautions:
- Assurez-vous que la propriété Raycast Target de l'élément d'interface utilisateur est cochée.
Les références
- Documentation officielle Unity : Physics2DRaycaster
- Tutoriel officiel Unity : Événements de l'interface utilisateur