[RESOLU][DB-AL]Properties Long cLick (appel de variable)

Pour les scripts écrits en C#
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
Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

[RESOLU][DB-AL]Properties Long cLick (appel de variable)

Message par 1300vrtical » 25 Fév 2019 17:21

Bonjour, :hello:
Je suis en train de commencer le code et voilà que je bute à mon premier essai en solo... :lol:Je vous expose mon problème:j'ai un script A, qui me sert a repéré un long clic, et un script B, à qui je donnerais des instructions au personnage en fonction du clic long. Seulement voilà: je n'arrive pas à faire passer les informations grâce au propreties! :/
J'aimerais vraiment savoir ce qui bloque...
ScriptA

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KLongClick : MonoBehaviour 
{
     private float startTime, endTime;
     bool _longClick = false;

#region properties
 // envoyer l'info du _longClick
     public bool LongClick
     {
         get
         { 
            
             return _longClick;
             Debug.Log("Yes" + _longClick);
            
         }
     }
 #endregion
#region Method
     void Start() 
     {
         startTime = 0f;
         endTime = 0f;
     }
     void Update() {
         if (Input.GetMouseButtonDown(0))
         startTime= Time.time;

         if (Input.GetMouseButtonUp(0))
         endTime = Time.time;

         if ( endTime - startTime > 0.1f)
         {
            
             startTime = 0f;
             endTime = 0f;
             _longClick = true;
             Debug.Log("Long Click " + _longClick);
         }
         if (!Input.GetMouseButtonUp(0))
         {
             _longClick = false;
             Debug.Log("Long Click else " + _longClick);
             
         }
     }
#endregion


}
ScriptB

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Perso : MonoBehaviour
{
  

    KLongClick longclick = new KLongClick(); 
    bool _longClick = true;

    

        void Start()
    {
      
    }
    //  Update is called once per frame  //  
    void Update()
    {
    _longClick = longclick.LongClick;
     Debug.Log("blabla " + _longClick);
     
    }
}
 
Je tourne en boucle et sans aide extérieure, je pense le faire indéfiniment.
Alors merci à ceux qui m'aiderons et bonne après-midi :hello:
Dernière édition par 1300vrtical le 04 Mars 2019 12:28, édité 1 fois.
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL]Properties Long cLick

Message par Max » 25 Fév 2019 18:58

Bonsoir,

tout cela semble bien compliqué ;)

Un code simple qui à priori donne le résultat que tu souhaites:

Code : Tout sélectionner

    private float t=0;

    private void Update()
    {
        if(Input.GetMouseButton(0))
        {
            t += Time.deltaTime;
        }
        if(Input.GetMouseButtonUp(0))
        {
            Debug.Log("Durée d'appuis: " + t);
            t = 0;
        }
    }
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: [DB-AL]Properties Long cLick

Message par 1300vrtical » 26 Fév 2019 17:04

Merci! ça clarifie effectivement mon code! :super:
Mais je n'arrives toujours pas récupérer le bool longClick de mon script A vers mon Script B... :-|
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL]Properties Long cLick

Message par Max » 26 Fév 2019 18:39

Hello,

la question que je poserais est: est-il utile de passer par un script spécifique pour tester un truc qui prend trois lignes, et que tu pourrais aisément insérer dans l'update de ton script "Perso" ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL]Properties Long cLick

Message par Moi 1971 » 27 Fév 2019 09:52

Bonjour,
il y a dans ton script des Debug.log. Peux-tu nous montrer l'ensemble des messages de la console debug pour que nous puissions voir le déroulé du code?
Ps : Moi j'aurais mis des messages débug en français, et j’y aurais mis "truc_A" pour le fichier A et "truc_B" pur le fichier B. Beaucoup plus lisible...

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: [DB-AL]Properties Long cLick

Message par 1300vrtical » 27 Fév 2019 12:04

Bonjour,
Pour répondre à ta question MAX, tu raison peut être que je m'obstine :inlove: mais au vue du projet que je vais bientôt vous présenter, ça me semble plus juste. Et puis, ça fait aussi un exercice, j'aimerais savoir pourquoi cette technique ne fonctionne pas 😅. 🎵Es una obsesión🎵. Mais effectivement, ton code est plus délicat et peut possiblement se glisser partout.

Et pour répondre à la tienne MOI 1971, je t'envoie la console debug, en indiquant quand je clique ! Mais le script b n'est jamais activités.

Script A:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KLongClick : MonoBehaviour
{
    private float t=0;
    bool _longClick = false;

#region properties
// envoyer l'info du _longClick
    public bool LongClick
    {
        get
        {
          
            return _longClick;
          
          
        }
    }
#endregion
#region Method
    void Start()
    {
        _longClick = false;
    }
    private void Update()
   {
      

       if(Input.GetMouseButton(0))
       {
           t += Time.deltaTime;
          
       }
       if(Input.GetMouseButtonUp(0))
       {
           Debug.Log("Durée d'appuis: " + t);
           t = 0;
          
       }
       if( t > 0.6)
       {
           Debug.Log("ScriptClickLong OK");
           _longClick =true;
           Debug.Log("LC appuis: " + _longClick );

       }
       else
       {
           _longClick = false;
       Debug.Log("Scrit LongCLick sans apuie: " + _longClick );
       }
   }
   
#endregion
ScriptB:

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Perso : MonoBehaviour
{
   //public KLongClick myPropriete;

   KLongClick longclick = new KLongClick();
   bool _longClick = true;

  

       void Start()
   {
    
   }
   //  Update is called once per frame  // 
   void Update()
   {
   _longClick = longclick.LongClick;
    Debug.Log("ScriptPerso " + _longClick);
   
   }
}

Image

Merci beaucoup pour votre aide, c'est super sympa !
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-AL]Properties Long cLick

Message par Max » 27 Fév 2019 12:19

Salut,

ça:

Code : Tout sélectionner

KLongClick longclick = new KLongClick();
tu ne peux pas. D'ailleurs tu dois avoir un warning dans les logs qui te le spécifie. Tu ne peux pas employer new avec une classe dérivant de MonoBehaviour. Donc normal que cela ne fonctionne pas.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL]Properties Long cLick

Message par Moi 1971 » 27 Fév 2019 13:01

Le sujet a déjà été traité. Exemple :
viewtopic.php?t=12787

La solution est donnée dans le dernier poste de ce file. Le code date de juillet 2016, il devrait être encore valable...

Avatar de l’utilisateur
1300vrtical
Messages : 54
Inscription : 17 Nov 2018 17:02
Localisation : Bordeaux

Re: [DB-AL]Properties Long cLick

Message par 1300vrtical » 28 Fév 2019 13:53

Bonjour ,
Lorsque je me rends sur l’autre topic, (que j'avais déjà vus par ailleurs), mais je trouve la fin pas très explicite...
Et voila, ensuite dans ce même script (le script B) tu n'as plus qu'a utiliser les variables de ton script a, avec une seul condition c'est que dans ton script A tes variables sont public.
comment j'écris cette fameuse variable?
parce que lorsque je l'écris comme ça _longClick j’ai: “error CS0103: The name '_longClick' does not exist in the current context”. ça qui me parait assez logique, vu que je ne l’ai pas créé plus tôt.
Et lorsque je l'écris comme ça KLongClick._longClick j’ai : “ error CS0120: An object reference is required for the non-static field, method, or property 'KLongClick._longClick'” ce qui m’as amené à cette résolution, que me déconseille Max et la console.
je ne sais pas comment me sortir de cet étau…
Merci de me consacrer un peu de votre temps, cordialement 1300
"Internet à toutes les réponses, encore faut-il poser les bonnes questions!" :merci:
Voici mon super projet: FLANERIE

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL]Properties Long cLick

Message par Moi 1971 » 28 Fév 2019 15:15

Bonjour,
si je reprend (une partie de) tes deux scripts, cela pourrait donné :
Fichier A

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KLongClick : MonoBehaviour
{
       public int un_Int_Accessible_Depuis_LExterieur_Ficher_A;

#region properties
#endregion
#region Method
    void Start()
    {
        un_Int_Accessible_Depuis_LExterieur_Ficher_A = 1;
    }
    private void Update()
   {
      un_Int_Accessible_Depuis_LExterieur_Ficher_A ++;
      if (un_Int_Accessible_Depuis_LExterieur_Ficher_A  > 1000) un_Int_Accessible_Depuis_LExterieur_Ficher_A  = 1;
   }
}   
#endregion
Fichier B

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Perso : MonoBehaviour
{
 
// Declaration d'une variable de type fichier/script
public KLongClick variable_Type_Fichier_Pour_Acceder_Au_Fichier_A;

 void Start()
 {
 	//Initialisation de la variable de type fichier/script
 	 variable_Type_Fichier_Pour_Acceder_Au_Fichier_A = GetComponent<KLongClick>();
 }

   //  Update is called once per frame  // 
   void Update()
   {
       // Acces à la variable de type Int du fichier A
       debug.log(variable_Type_Fichier_Pour_Acceder_Au_Fichier_A.un_Int_Accessible_Depuis_LExterieur_Ficher_A);
   }
}
Ps : Code fait à la va vite, pas testé...

Répondre

Revenir vers « (C#) CSharp »