[RESOLU] EditorWindow : Update()

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
eldoir
Messages : 9
Inscription : 25 Août 2016 16:54
Localisation : France
Contact :

[RESOLU] EditorWindow : Update()

Message par eldoir » 22 Fév 2021 12:55

Bonjour,
Ça fait une heure que je galère là-dessus. J'ai une EditorWindow très basique :

Code : Tout sélectionner

public class ChangeCellSizeWindow : EditorWindow
    {
        public static void ShowWindow()
        {
            var window = GetWindow<ChangeCellSizeWindow>();
 
            // Showing it as a modal forces the user to process it immediately
            window.ShowModalUtility();
        }
    }
Mon problème tient dans la dernière line.
Je voudrais capturer les inputs clavier quand ma fenêtre est visible, pour pouvoir fermer la fenêtre en appuyant sur Entrée au lieu d'avoir à cliquer sur un bouton.
La doc dit qu'EditorWindow a déjà une fonction Update : https://docs.unity3d.com/ScriptReferenc ... pdate.html

MAIS cette fonction ne semble pas être appelée lorsque je demande spécifiquement à afficher mon EditorWindow avec window.ShowModalUtility(). Ni même avec window.ShowModal().
Si j'utilise window.Show() ou window.ShowUtility(), la fonction Update est bien appelée.

C'est vraiment plus pertinent dans mon cas d'avoir ma fenêtre qui s'affiche comme une ModalWindow, parce que je veux empêcher l'utilisateur de faire quoi que ce soit d'autre tant qu'il n'a pas traité la fenêtre.

J'ai aussi essayé de m'inscrire à quelques delegates dans OnEnable/OnDisable (comme SceneView.duringSceneGUI ou EditorApplication.update), mais ça n'a pas marché (ça n'affiche aucun Debug.Log, et ne catch aucun input via Event.current comme c'est pourtant conseillé dans plein de forums).

Merci pour vos réponses ! :)
Dernière édition par eldoir le 22 Fév 2021 16:36, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: EditorWindow : Update()

Message par boubouk50 » 22 Fév 2021 14:25

Salut,

Effectivement, ce n'est pas le comportement attendu, puisque ta window hérite de EditorWindow. Et je ne vois rien dans la doc qui le signale.
Je ne suis pas expert EditorWindow, mais ne peux-tu pas mettre les inputs dans OnGUI () dans ce cas précis?
Ce n'est pas très "propre", mais ça contournerait ce problème.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
eldoir
Messages : 9
Inscription : 25 Août 2016 16:54
Localisation : France
Contact :

Re: EditorWindow : Update()

Message par eldoir » 22 Fév 2021 16:35

Salut boubouk et merci pour ta réponse,
Tu vas rire, je n'y avais même pas pensé. :-D
Ça marche avec ceci :

Code : Tout sélectionner

void OnGUI()
{
    // We're doing this in OnGUI() since the Update() function doesn't seem to get called when we show the window with ShowModalUtility().
    if ((Event.current.type == EventType.KeyDown || Event.current.type == EventType.KeyUp) &&
        (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter))
    {
        // Do stuff...
    }
}
Je check les deux EventTypes KeyDown et KeyUp, parce qu'après quelques tests, si je ne teste qu'avec KeyDown, ça ne capture pas toujours l'input au moment où j'appuie, pour une raison qui m'échappe.
Je vais rester avec ça pour le moment, au moins ça marche.
Merci à toi ! :-D

Répondre

Revenir vers « Scripting »