Cela faisait un moment que je n'étais pas revenu. Quelques mois de pause
Un script encore une fois pour les UI et Canvas. Ce dernier va permettre de redéfinir le « First Selected » du component EventSystem de manière à ce que votre canvas puisse garder en sélection et en mémoire le dernier Bouton/Slider… sélectionné.
Si par exemple, pour un menu, la souris est utilisé et qu’un clic est effectué en dehors des boutons du votre menu, le focus ne sera pas perdu sur votre élément et permettra donc de garder une navigation au clavier et de cacher votre curseur de souris si tel est votre désir.
Il fonctionnera tout seul en arrière plan, il ne vous reste qu’à spécifier le GameObject en FirstSelected et vous voilà tranquille.
Code : Tout sélectionner
using UnityEngine;
using UnityEngine.EventSystems;
public class EventSystemFix : MonoBehaviour
{
public GameObject firstSelected;
private EventSystem eventSystem;
private GameObject lastSelected;
private bool onEnable = false, firstStart = true;
private void OnEnable() { if (!firstStart) { onEnable = true; } }
private void Start()
{
// Si le component EventSystem n'est pas sur le même GameObject
// Pensez à bien préciser sa localisation dans la varible ci-dessous !!!!
eventSystem = GetComponent<EventSystem>();
onEnable = true;
firstStart = false;
}
private void Update() { GetCurrentSelected(); SetSelected(); }
private void OnDisable() { eventSystem.SetSelectedGameObject(null); onEnable = false; }
private void GetCurrentSelected()
{
// Sauvegarde du nouvel élément sélectionné
if (eventSystem.currentSelectedGameObject != lastSelected && eventSystem.currentSelectedGameObject != null)
{
lastSelected = eventSystem.currentSelectedGameObject;
}
// On restaure le dernier élément sélectionné lors d'une perte de focus
else if (eventSystem.currentSelectedGameObject != lastSelected && eventSystem.currentSelectedGameObject == null)
{
eventSystem.SetSelectedGameObject(lastSelected);
}
}
private void SetSelected()
{
if (onEnable)
{
lastSelected = firstSelected;
eventSystem.SetSelectedGameObject(firstSelected);
onEnable = false;
}
}
}