Boutons de forme personnalisés dans l'interface utilisateur Unity

Récemment, j'ai eu besoin d'utiliser des boutons d'un formulaire non standard dans mon projet. Cependant, cette tâche apparemment insignifiante m'a causé quelques difficultés.

Le problème est que le bouton d'interface utilisateur standard gère les clics, même dans les zones transparentes, ce qui dans ce cas est complètement indésirable. Dans le même temps, le composant Button lui-même n'a aucun paramètre (visible dans l'inspecteur) qui pourrait être responsable des zones du bouton qui pourraient gérer le survol / clic.


Après un certain temps de recherche sur Internet et de documentation sur le tabagisme, voici ce qui m'est venu, avec cette solution plutôt simple:

(Je dirai tout de suite qu'un exemple similaire se trouve dans la documentation Unity , mais pour le moment son code est déjà marqué comme obsolète, j'ai donc décidé de le mettre à jour et de le modifier un peu)

using UnityEngine; using UnityEngine.UI; public class ButtonClickMask : MonoBehaviour { [Range(0f, 1f)] //1 public float AlphaLevel = 1f; //2 private Image bt; //3 void Start() { bt = gameObject.GetComponent<Image>(); bt.alphaHitTestMinimumThreshold = AlphaLevel; //4 } } 

  1. Attribut qui affiche dans l'inspecteur un curseur pratique avec des valeurs de 0 à 1.
  2. La valeur minimale du canal alpha que doit avoir la partie de la texture sur laquelle se trouve le curseur pour gérer les clics.
  3. Le composant Image d'un bouton (vous devez travailler avec lui, et non avec Button).
  4. Le paramètre alphaHitTestMinimumThreshold est exactement ce qui détermine le niveau minimum de transparence pour une partie de la texture afin qu'il puisse gérer le pressage.

Le script est donc prêt. Passons maintenant à l'ajustement de la texture du bouton. Pour que le code fonctionne et ne génère pas d'erreurs, vous devez activer la capacité de lecture / écriture dans la texture Paramètres d'importation. N'oubliez pas d'accepter les modifications en cliquant sur Appliquer.



Maintenant, nous accrochons le script sur le bouton souhaité, définissons le niveau alpha à la valeur souhaitée (dans mon cas - 1) ...



... nous lançons et nous réjouissons que le bouton ne gère plus les clics sur les zones transparentes!

Source: https://habr.com/ru/post/fr478734/


All Articles