[DB-Al]Problème de script Click & Moove

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
xmimoix
Messages : 6
Inscription : 27 Nov 2016 15:05

[DB-Al]Problème de script Click & Moove

Message par xmimoix » 14 Déc 2016 20:43

Bonjour je m’entraîne toujours sur unity et aujourd'hui j'ai voulu tester un script pour déplacer un personnages a l'endroit ou je click avec la souris.

Problèmes mon perso quand il avance et qu'il doit monter sur un terrain au lieu de rester sur sol plat , "tremble" et ne reste jamais fixe.

Au début l'objet tomber sur lui même j'ai pallier le problèmes avec un rigidbody est modifier les constraints , mais mon perso arriver a destination "tremble" toujours.

Voici mon code que vous pouvez tester :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class TapToMove : MonoBehaviour
{
    //flag to check if the user has tapped / clicked. 
    //Set to true on click. Reset to false on reaching destination
    private bool flag = false;
    //destination point
    private Vector3 endPoint;
    //alter this to change the speed of the movement of player / gameobject
    public float duration = 50.0f;
    //vertical position of the gameobject
    private float yAxis;

    void Start()
    {
        //save the y axis value of gameobject
        yAxis = gameObject.transform.position.y;
    }

    // Update is called once per frame
    void Update()
    {

        //check if the screen is touched / clicked   
        if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began) || (Input.GetMouseButtonDown(0)))
        {
            //declare a variable of RaycastHit struct
            RaycastHit hit;
            //Create a Ray on the tapped / clicked position
            Ray ray;
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);


            //Check if the ray hits any collider
            if (Physics.Raycast(ray, out hit))
            {
                //set a flag to indicate to move the gameobject
                flag = true;
                //save the click / tap position
                endPoint = hit.point;
                //as we do not want to change the y axis value based on touch position, reset it to original y axis value
                endPoint.y = yAxis;
                Debug.Log(endPoint);
            }

        }
        //check if the flag for movement is true and the current gameobject position is not same as the clicked / tapped position
        if (flag && !Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude))
        { //&& !(V3Equal(transform.position, endPoint))){
          //move the gameobject to the desired position
            gameObject.transform.position = Vector3.Lerp(gameObject.transform.position, endPoint, 1 / (duration * (Vector3.Distance(gameObject.transform.position, endPoint))));
        }
        //set the movement indicator flag to false if the endPoint and current gameobject position are equal
        else if (flag && Mathf.Approximately(gameObject.transform.position.magnitude, endPoint.magnitude))
        {
            flag = false;
            Debug.Log("I am here");
        }

    }
}
Dernière édition par xmimoix le 15 Déc 2016 19:08, édité 1 fois.

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

Re: Problème de script Click & Moove

Message par boubouk50 » 15 Déc 2016 10:14

S'il tremble encore à l'arrivée, soit il n'arrive jamais vraiment (vérifie bine que flag passe à false), soit ton rigidbody est mal configuré (surement la masse), soit c'est autre chose que je ne vois pas.
"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

xmimoix
Messages : 6
Inscription : 27 Nov 2016 15:05

Re: [DB-Al]Problème de script Click & Moove

Message par xmimoix » 15 Déc 2016 19:10

Bonsoir !

Merci de votre réponse , je pense ( je suis sur même ) que flag ne passe jamais a false , le script n'est pas fait pour gérer aussi la monter sur l'axe Y , auriez vous une idée pour palier ce problèmes et mettre en jeux l'axe y , tout en ayant un mouvement propre

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

Re: [DB-Al]Problème de script Click & Moove

Message par boubouk50 » 15 Déc 2016 19:20

Entre penser et être sûr, il y a un océan de possibilités...

Aussi, si tu prenais la peine de lire un peu plus attentivement le code, tu verrais ce commentaire:

Code : Tout sélectionner

//as we do not want to change the y axis value based on touch position, reset it to original y axis value
 endPoint.y = yAxis;
Qui enlève la composante y de ton endpoint et donc empêche ton perso d'arriver à destination. (vu que le calcul est effectué en fonction des 3 axes)
Par contre, la hauteur ne doit pas être dirigé par le mouvement mais par le rigidbody, et là, je ne sais pas si c'est automatique ou pas avec les collisions, sinon il te faut donc recalculer la bonne hauteur au point donné.
"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 »