Bonjour, je souhaite lancer des événements quand on clique sur une image mais en ignorant les parties transparentes de l'image.
L'image est placée dans un Canvas, mais je n'arrive à rien.
Soit le clic n'est pas reconnu, soit il est reconnu sur l'image entière zone transparente comprise.
Y-a-t-il une solution ?
Merci beaucoup pour vos réponses.
Cliquer sur une image en ignorant la zone transparente
Re: Cliquer sur une image en ignorant la zone transparente
La question est intéressante. J'ai essayé avec un mask, mais j'avoue méconnaître ce composant. Après quelques essais infructueux, j'ai posé la question à ChatGPT :
using UnityEngine;
Exemple de code :Utiliser un Collider 2D : assurez-vous que votre GameObject contenant l'image a un composant Collider 2D. Vous pouvez utiliser un Box Collider 2D ou un Polygon Collider 2D selon la forme de votre image.
Utiliser un Raycast : utilisez un raycast pour détecter le clic sur l'image. Vous pouvez utiliser la fonction Physics2D.Raycast pour cela.
Vérifier la transparence : lorsque le rayon touche le Collider, vérifiez la couleur du pixel correspondant dans la texture de l'image pour déterminer s'il est transparent ou non.
using UnityEngine;
Code : Tout sélectionner
public class ClicImage : MonoBehaviour
{
void Update()
{
// Vérifier si le bouton de la souris est enfoncé
if (Input.GetMouseButtonDown(0))
{
// Convertir la position de la souris en Ray
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
// Si le rayon touche un Collider 2D
if (hit.collider != null)
{
// Obtenir la texture de l'image
Texture2D texture = hit.collider.gameObject.GetComponent<SpriteRenderer>().sprite.texture;
// Convertir la position du rayon en coordonnées de texture
Vector2 pixelUV = hit.textureCoord;
// Convertir les coordonnées de texture en coordonnées de pixel
int x = (int)(pixelUV.x * texture.width);
int y = (int)(pixelUV.y * texture.height);
// Obtenir la couleur du pixel correspondant
Color pixelColor = texture.GetPixel(x, y);
// Vérifier la transparence du pixel
if (pixelColor.a > 0.1f) // ajustez ce seuil selon vos besoins
{
// Le clic a été effectué sur une partie non transparente de l'image
// Mettez ici le code pour gérer l'événement de clic
Debug.Log("Clic sur une partie non transparente de l'image !");
}
}
}
}
}
Re: Cliquer sur une image en ignorant la zone transparente
Bonjour,
pour compléter la réponse, tu peux regarder aussi du coté de Image.alphaHitTestMinimumThreshold.
cela devrait je pense aussi solutionner ton soucis
pour compléter la réponse, tu peux regarder aussi du coté de Image.alphaHitTestMinimumThreshold.
cela devrait je pense aussi solutionner ton soucis
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ