[DB-AL] Une methode double clic ? RESOLU
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :
Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé
Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie
Exemple :
[DB-RS] Mouvement perso multijoueur
[DB-AL] Une methode double clic ? RESOLU
Bonjour a tous,
Existe-t-il une méthode double clic déjà codée pour nous, pauvre mortels ? (Comparable au OnMouseUp qui fonctionne très bien).
En recherchant un peu sur Google, il semble que non, et j'ai testé des bouts de codes proposés sur des forums, mais ça ne fonctionnait pas nickel...
Je viens au news pour savoir... Au pire si quelqu'un en a codé une et veut bien la partager ? Sinon je vais essayer de mon coté et ça ne me dérange pas de partager ça pour d'autres qui en auraient besoin, si ça marche
Existe-t-il une méthode double clic déjà codée pour nous, pauvre mortels ? (Comparable au OnMouseUp qui fonctionne très bien).
En recherchant un peu sur Google, il semble que non, et j'ai testé des bouts de codes proposés sur des forums, mais ça ne fonctionnait pas nickel...
Je viens au news pour savoir... Au pire si quelqu'un en a codé une et veut bien la partager ? Sinon je vais essayer de mon coté et ça ne me dérange pas de partager ça pour d'autres qui en auraient besoin, si ça marche
Dernière édition par DJ-OMZ le 28 Juin 2017 15:18, édité 2 fois.
- boubouk50
- ModoGenereux
- Messages : 6215
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Une methode double clic ?
Un double-clic, c'est deux OnMouseDown () ou deux Input.GetMouseButtonDown(0) dans un intervalle court déterminé.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Une methode double clic ?
Code : Tout sélectionner
float delai = 0.5f;
float lastClick = -1f;
void Update() {
if (Input.GetMouseButtonDown(0)) {
if (Time.time - lastClick < delai) {
// do smthng
lastClick = -1f;
} else {
lastClick = Time.time;
}
}
}
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”
Re: Une methode double clic ?
Merci pour ce code.evereal a écrit :Code : Tout sélectionner
float delai = 0.5f; float lastClick = -1f; void Update() { if (Input.GetMouseButtonDown(0)) { if (Time.time - lastClick < delai) { // do smthng lastClick = -1f; } else { lastClick = Time.time; } } }
Il correspond bien a ce que j'avais, mais dans mon update, j'obtiens mon resultat 3 fois :
Code : Tout sélectionner
if (Input.GetMouseButtonDown(0))
{
if (Time.time - lastClick < delai)
{
Debug.Log("Double clic");
lastClick = -1f;
}
else
{
Debug.Log("Simple clic");
lastClick = Time.time;
}
}
Simple clic
Simple clic
Simple clic
Soit :
Double clic
Double clic
Double clic
Pourquoi ça le fait 3 fois ?
Edit :
Pour ceux qui seraient intéressés plus tard, voila une méthode qui a fonctionné pour moi :
Code : Tout sélectionner
using System.Collections;
using UnityEngine;
public class Example : MonoBehaviour {
public float clickDelta = 0.35f; // Max between two click to be considered a double click
private bool click = false;
private float clickTime;
void Update() {
if (click && Time.time > (clickTime + clickDelta)) {
// Ici, mon action en cas de simpleclic
click = false;
}
}
void OnMouseDown() {
if (click && Time.time <= (clickTime + clickDelta)) {
// Ici, mon action en cas de double clic
click = false;
}
else {
click = true;
clickTime = Time.time;
}
}
}
- boubouk50
- ModoGenereux
- Messages : 6215
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: Une methode double clic ?
Combien de fois ce script est exécuté par clic? Je veux dire par là combien d’instances du script sont présentes?DJ-OMZ a écrit :Pourquoi ça le fait 3fois ?
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: Une methode double clic ?
Oh ! J'ai 3 objets qui ont ce script en component !boubouk50 a écrit :Combien de fois ce script est exécuté par clic? Je veux dire par là combien d’instances du script sont présentes?DJ-OMZ a écrit :Pourquoi ça le fait 3fois ?
C'est pour ça que j'ai 3 fois le texte du debug qui s'affiche ?
C'est bizarre parce que :
Code : Tout sélectionner
if (Input.GetMouseButtonDown(0))
{
if (Time.time - lastClick < delai)
{
Debug.Log("Double clic");
lastClick = -1f;
}
else
{
Debug.Log("Simple clic");
lastClick = Time.time;
}
}
- boubouk50
- ModoGenereux
- Messages : 6215
- Inscription : 28 Avr 2014 11:57
- Localisation : Saint-Didier-en-Bresse (71)
Re: [DB-AL] Une methode double clic ? RESOLU
Non, celui-là est en fonction de l'Input. Donc il est exécuté à chaque clic de la souris.
Il faut passer par l’événement OnMouseDown () pour que ce soit 'localisé'.
T'avais une chance sur les 2 solutions proposées. Raté.
Qui plus est, un événement est exécuté seulement lorsque l'interaction à lieu alors que l'Update () l'est à chaque frame. Donc il est moins gourmand. (Une condition par frame c'est pas la mort non plus)
Après c'est une question de nécessite. Est-ce plutôt le double-clic qui va chercher un objet via un Raycast ou bien est-ce l'objet lui-même qui doit savoir s'il est double-cliqué.
La première induit une instance unique, la seconde une instance par objet double-cliquable. Donc à toi de voir ce qui semble le plus juste ou logique en fonction de ton besoin.
Il faut passer par l’événement OnMouseDown () pour que ce soit 'localisé'.
T'avais une chance sur les 2 solutions proposées. Raté.
Qui plus est, un événement est exécuté seulement lorsque l'interaction à lieu alors que l'Update () l'est à chaque frame. Donc il est moins gourmand. (Une condition par frame c'est pas la mort non plus)
Après c'est une question de nécessite. Est-ce plutôt le double-clic qui va chercher un objet via un Raycast ou bien est-ce l'objet lui-même qui doit savoir s'il est double-cliqué.
La première induit une instance unique, la seconde une instance par objet double-cliquable. Donc à toi de voir ce qui semble le plus juste ou logique en fonction de ton besoin.
"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
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation
Re: [DB-AL] Une methode double clic ? RESOLU
C'est ce que j'ai compris également, bon bah merci !boubouk50 a écrit :Non, celui-là est en fonction de l'Input. Donc il est exécuté à chaque clic de la souris.
Il faut passer par l’événement OnMouseDown () pour que ce soit 'localisé'.
Un grand classique chez moi...boubouk50 a écrit :T'avais une chance sur les 2 solutions proposées. Raté.
C'est l'objet qui doit savoir. J'effectue une action si je clique sur mon objet, une autre si je double clic, et c'est bien a lui de le savoir dans mon cas.boubouk50 a écrit :Est-ce plutôt le double-clic qui va chercher un objet via un Raycast ou bien est-ce l'objet lui-même qui doit savoir s'il est double-cliqué.
Bon bah ça m'aura fait comprendre une erreur a ne pas reproduire, bien vu