[RESOLU][DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

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
General_Bright
Messages : 11
Inscription : 31 Août 2017 14:41
Localisation : Chambery

[RESOLU][DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par General_Bright » 31 Août 2017 15:14

Bonjour , j'ai développé un script pour bouger un cylindre (comme un pion) sur des GameObject hexagonale avec un système de rayon . Normalement quand un hexagone est dans le rayon (le rayon est un collider en trigger) il change le tag de l'hexagone en "InRadius" et quand-t-il est hors du rayon il a le tag "Outradius" (Jusque la tout va bien :o ) . Apres il y a une condition sauf que peu importe si la condition est vrai ou fausse le bloc de code est tout de même executé et cela ne marche pas du premier coups quand je clique sur un hexagone. J'utilise Microsoft Visual Studio 2017 Community. (je tien a dire que je suis totalement un débutant dans le sujet)

Voici le script :

Code : Tout sélectionner

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

public class DeplacementPion : MonoBehaviour {

    public GameObject Pion1;
    public static int DeplacementRestants = 3;
    public static float PosX;
    public static float PosZ;
    public static float PosY;

    void Start()
    {
        DeplacementRestants = 3; 
    }

    void OnTriggerEnter()
    {
        gameObject.tag = "InRadius";
        Debug.Log("Mon tag est " + gameObject.tag);
    }

    void OnTriggerExit()
    {
        gameObject.tag = "OutRadius";
        Debug.Log("Mon tag est " + gameObject.tag);
    }

    void OnMouseDown()
    {
        if (gameObject.tag == "InRadius" && DeplacementRestants > 0) ;
        {
            Debug.Log("OK");
            DeplacementRestants--;
            PosX = gameObject.transform.position.x;
            PosZ = gameObject.transform.position.z;
            PosY = gameObject.transform.position.y;
            Debug.Log("Position X : " + PosX + "Position Z : " + PosZ + "Position Y : " + PosY);
            Debug.Log("Déplacement réstants : " + DeplacementRestants);
            Vector3 PosPion1 = new Vector3(PosX,PosY + 0.4f,PosZ);
            Pion1.transform.position = PosPion1;
        }   
    }
}
Merci d'avance pour la lecture et les futures réponses !! :-D :-D

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par simonj » 31 Août 2017 15:27

Salut,
General_Bright a écrit :
31 Août 2017 15:14
[...] Apres il y a une condition sauf que peu importe si la condition est vrai ou fausse le bloc de code est tout de même executé[...]
Regarde si ton gameObject n'as pas directement le tag "InRadius" ?
General_Bright a écrit :
31 Août 2017 15:14
[...] et cela ne marche pas du premier coups quand je clique sur un hexagone. [...]
Est-ce que tes Debug affichent quelque chose ? C'est régulier que ça ne marche pas du premier coup ? Est-ce que c'est uniquement le premier coup qui ne marche pas ?

General_Bright
Messages : 11
Inscription : 31 Août 2017 14:41
Localisation : Chambery

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par General_Bright » 31 Août 2017 15:51

simonj a écrit :
31 Août 2017 15:27
Regarde si ton gameObject n'as pas directement le tag "InRadius" ?
Est-ce que tes Debug affichent quelque chose ? C'est régulier que ça ne marche pas du premier coup ? Est-ce que c'est uniquement le premier coup qui ne marche pas ?
Alors non mon pion ne possède pas le tag InRadius Ou OutRadius ni le script, oui mes debug affiche quelque chose c'est grâce a sa que j'ai découvert que la condition ne marchais pas et sinon des fois le pion se déplace du premier coup et des fois faut spam ou sa ne marche pas donc c'est totalement irrégulier . J'ai oublié de précisé que les hexagone sont des prefab (sa change peut être quelque chose).

Voila !

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par simonj » 31 Août 2017 18:40

Pour comparer des tag, il faut utiliser la méthode "CompareTag".

Ensuite, pour le fait que ça ne se fasse pas tout de suite, j'aurais tendance à mettre en doute la fonction "OnMouseDown". J'imagine que le rayon qui est tiré pour savoir si le curseur se trouve sur l'objet doit être bloqué par un autre objet. Mais je ne sais pas comment est configuré ta scène donc je ne saurais dire si c'est ça ou pas.

General_Bright
Messages : 11
Inscription : 31 Août 2017 14:41
Localisation : Chambery

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par General_Bright » 31 Août 2017 21:17

simonj a écrit :
31 Août 2017 18:40
Pour comparer des tag, il faut utiliser la méthode "CompareTag".
Merci pour ta réponse grâce a toi j'ai résolut 50% du problème : la souris était bloquer par le trigger du cylindre ^^

Après j'ai changer le code comme sa :

Code : Tout sélectionner

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

public class DeplacementPion : MonoBehaviour {

    public GameObject Pion1;
    public static int Deplacement;
    public static float PosX;
    public static float PosZ;
    public static float PosY;

    void Start()
    {
        Deplacement = 0; 
    }

    void OnTriggerEnter()
    {
        gameObject.tag = "InRadius";
    }

    void OnTriggerExit()
    {
        gameObject.tag = "OutRadius";
    }

    void OnMouseDown()
    {
        if (gameObject.CompareTag("InRadius")) ;
        {
            if (Deplacement <= 3) ;
            {
                Deplacement ++;
                PosX = gameObject.transform.position.x;
                PosZ = gameObject.transform.position.z;
                PosY = gameObject.transform.position.y;
                Debug.Log("Position X : " + PosX + " Position Z : " + PosZ + " Position Y : " + PosY);
                Debug.Log("Déplacement réstants : " + Deplacement);
                Vector3 PosPion1 = new Vector3(PosX, PosY + 0.4f, PosZ);
                Pion1.transform.position = PosPion1;
            }
        }   
    }
}

Mais cela ne marche pas , toujours le même problème les deux condition s'active peut importe l'état de la condition !
Ma scène est configuré comme cela :
Image

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par simonj » 31 Août 2017 23:04

General_Bright a écrit :
31 Août 2017 21:17
[...]
if (gameObject.CompareTag("InRadius")) ;
{
if (Deplacement <= 3) ;
{
[...]
Je pense que ça viens de là. On ne met pas de ";" après une condition. Sinon tu exécute un bloc vide pour ta condition et le reste est forcément exécuté vu qu'il n'est pas dans le bloc de la condition ;)

General_Bright
Messages : 11
Inscription : 31 Août 2017 14:41
Localisation : Chambery

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par General_Bright » 01 Sep 2017 13:53

simonj a écrit :
31 Août 2017 23:04
Je pense que ça viens de là. On ne met pas de ";" après une condition. Sinon tu exécute un bloc vide pour ta condition et le reste est forcément exécuté vu qu'il n'est pas dans le bloc de la condition ;)
GRAND merci a toi Simonj d'avoir pris la peine de m'aider dans mon problème , au final pas si complexe que sa .
Le problème de condition venait effectivement du ' ; ' a la fin de la condition.

Et Encore Merci !!

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

Re: [DB-AL] - Problème -Mouvement d'un GameObject Par Rayon

Message par boubouk50 » 01 Sep 2017 14:03

Si le problème est résolu, merci de ne pas le verrouiller mais d'ajouter [RESOLU] en début de titre du premier post pour signaler aux autres membres que la réponse est trouvée.
"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

Répondre

Revenir vers « (C#) CSharp »