Merci pour ta réponse Boubouk!
Par curiosité,que veux-tu faire avec ce Handler?
En fait, vois tu, j'ai des panels pour les settings.
Ces panels comportent beaucoup de boutons et sont donc inscrits dans un scrollview.
On doit pouvoir naviguer au clavier (curseurs) dans les panels et je veux donc qu'il y ait un scroll automatique quand on se déplace dans la liste des boutons.
J'aurais voulu que cela se fasse au niveau du ScrollView lui-même de façon à ce que je puisse insérer des boutons (il y en a vraiment beaucoup..et différents) à volonté sans me soucier de rien et que leur OnSelect() soit fixé au démarrage!
J'ai trouvé comment assigner l'EventTrigger par script et cela donne jusqu'à présent (et qui fonctionne):
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using DG.Tweening;
public class Panel_ScrollView : MonoBehaviour
{
private ScrollRect m_scrollRect;
void Start () {
Button[] buttons = this.GetComponentsInChildren<Button>();
m_scrollRect = GetComponent<ScrollRect>();
foreach (Button btn in buttons)
{
EventTrigger.Entry onEntry = new EventTrigger.Entry();
onEntry.eventID = EventTriggerType.UpdateSelected;
onEntry.callback.RemoveAllListeners();
onEntry.callback.AddListener((eventData) => { updateScrollView(btn); });
btn.gameObject.AddComponent<EventTrigger>().triggers.Add(onEntry);
}
}
private void updateScrollView(Button btn)
{
// A terminer, ici les valeurs max et min sont codées en dur
m_scrollRect.verticalNormalizedPosition = Remap((btn.transform.parent.localPosition.y + btn.transform.localPosition.y) * -1, 46, 1134, 1, 0);
}
private float Remap(float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
}
A attacher donc à un ScrollView (qui dans mon cas - pour comprendre le code - contient un panel, lui-même contenant des boutons regroupés..en groupe
)
Toute réflexion/idée/critique est la bienvenue!