IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unity Discussion :

Trigger d'évènements en JS.


Sujet :

Unity

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 58
    Points
    58
    Par défaut Trigger d'évènements en JS.
    Salut à tous!
    Je bosse en ce moment sur un petit projet sous Unity, et je tente de faire un truc qui ressemble plus à du bidouillage qu'autre chose mais bon...

    Voilà: une fois le jeu compilé pour WebGL, tout est en JS natif. Je peux déplacer le personnage avec les flèches droite/gauche. J'aimerais rajouter un script directement à l'index.html pour catch le clic droit et le transformer en keydown droit, pareil pour le clic gauche.

    En dehors du fait que l'on peut se demander à quoi ça sert, c'est un vrai défi. J'arrive bien a trigger un keydown quand je clic droit, mais au lieu d'avancer un petit peu, le personnage avance en continu comme si je restais appuyé.

    Je vous laisse le script en C# qui permet les mouvements du personnage (le script est volontairement basique pour les besoins de l'exercice) et le script en JS que je rajoute après.

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    using UnityEngine;
    using System.Collections;
     
    public class move : MonoBehaviour {
     
    	public float Speed = 5f;
    	Rigidbody2D m_Body;
     
    	void Start () {
     
    	}
     
    	void Awake() {
    		m_Body = GetComponent<Rigidbody2D> ();
    	}
     
    	void Update () {
    		if(Input.GetKey(KeyCode.RightArrow)) {
    			transform.position += Vector3.right * Speed * Time.deltaTime;
    		}
    		if(Input.GetKey(KeyCode.LeftArrow)) {
    			transform.position += Vector3.left * Speed * Time.deltaTime;
    		}
    	}
    }

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var ev = document.createEvent('KeyboardEvent');
     
    ev.initKeyEvent('keydown', true, true, window, false, false, false, false, 39, 0);
     
    document.click = function() { 
        document.body.dispatchEvent(ev);
    };

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense qu'il faille simplement détecter le clic release (relâchement de clic), pour s'avoir quand arrêter le mouvement. Attention : le relâchement peut être hors focus et donc indétectable.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 58
    Points
    58
    Par défaut
    Je pense qu'un exemple sera plus parlant:

    sur cette page, ouvrir la console JavaScript et taper :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    document.onmousedown = function() {
        var event = document.createEvent( 'KeyboardEvent' );
        event.initKeyEvent( 'keydown', true, false, null, 0, false, 0, false, 39, 0 );
        document.dispatchEvent( event ); 
    }

    On peut voir que le clic droit simule bien un keydown mais le personnage ne s'arrête pas...

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Car il faut simuler un keyup, qui entrainera l'arrêt du personnage. Sans le keyup, Unity n'a pas de moyen de savoir lorsque l'utilisateur relache la touche (même si l’évènement est simulé).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 58
    Points
    58
    Par défaut
    C'était si évident Effectivement, j'étais tellement centré sur le fait d'annuler l'event que j'ai oublié de simuler le keyup. Bah ça fonctionne parfaitement, ma matière grise te remercie.

    Résolu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Journal évènements trigger Update macro
    Par Doutrick dans le forum Macros Access
    Réponses: 2
    Dernier message: 23/02/2013, 03h47
  2. Trigger événements systèmes
    Par bsangoku dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 02/04/2011, 18h30
  3. récupérer un évènement (trigger) depuis une base
    Par omekiane dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 27/01/2010, 11h45
  4. trigger évènement système et création de séquence.
    Par yorgh1234 dans le forum PL/SQL
    Réponses: 13
    Dernier message: 16/04/2009, 15h33
  5. Comment connaître le type d'évènement déclencheur du trigger
    Par vincent.delhommois dans le forum PL/SQL
    Réponses: 4
    Dernier message: 18/09/2006, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo