Faire bouger un objet d'un point A à un point B

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
Azlan
Messages : 8
Inscription : 02 Mars 2015 18:29

Faire bouger un objet d'un point A à un point B

Message par Azlan » 26 Mars 2015 18:05

Bonjour,
je suis débutant sur Unity et je voudrais faire bouger un objet R vers un autre objet V lorsque j'appuie sur l'objet V :
-J'ai rajouter un composant button sur V qui lorsque j'appuie dessus théoriquement appelle une fonction AllerA() cependant cela ne declenche pas la fonction quand j'appuie sur le personnage , il faut que j'appuie sur espace pour que ca marche
-Dans la fonction appeler par le button j'ai mis :

Code : Tout sélectionner

public void aller()
	{
		while (V.transform.position.x>transform.position.x)
		{
			transform.Translate((V.transform.position - transform.position).normalized * Time.deltaTime*0.001F);
		}
	}
Cependant l'objet R se teleporte directement a coté de l'objet V

Pourriez me dire ce qui cloche ?
Merci

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

Re: Faire bouger un objet d'un point A à un point B

Message par boubouk50 » 26 Mars 2015 18:20

Code : Tout sélectionner

while (V.transform.position.x>transform.position.x)
Ca signifie: Tant qu'il n'a pas atteint la position finale alors on le bouge. Tous ces calculs ne sont effectués que dans une seule frame!
C'est dans la fonction Update(), fonction appelée une fois par frame, que tu dois faire ta translation petit à petit. Pas de boucle while mais un if.
"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

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Faire bouger un objet d'un point A à un point B

Message par cayou66 » 26 Mars 2015 21:16


Avatar de l’utilisateur
Orkad
Messages : 24
Inscription : 03 Avr 2015 19:31

Re: Faire bouger un objet d'un point A à un point B

Message par Orkad » 04 Avr 2015 13:37

Il faut absolument que tu utilise la fonction Update() dans ce cas là, le while est à bannir car il ne rafraîchit pas la position de l'objet. Je te conseil de créer une classe "Movement3D" qui utilise:
soit Vector3.MoveTowards http://docs.unity3d.com/ScriptReference ... wards.html
soit Vector3.Lerp si tu veux un mouvement lisse http://docs.unity3d.com/ScriptReference ... .Lerp.html

Voici le script écrit par mes soins, j'espère qu'il pourra être utile à d'autres :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Movement3D : MonoBehaviour {
    public Vector3 wantedPositon;         //La position désirée
    public bool useLerp = false;         //Si on utilise la fonction Lerp dans notre Update
    public float speed = 10f;            //La vitesse de déplacement si on utilise MoveToward
    public float damping = 1f;            //Le facteur du lerp
    //damping = 0 -> L'ojet ne se déplacera pas
    //damping = 1000 -> L'objet ira à la position instantanement
    
    void Start () {
        wantedPositon = transform.position; //Pour que l'objet soit à sa place initiale dans la scene
    }
    
    void Update() {
        if(useLerp)
            transform.position = Vector3.Lerp(transform.position,wantedPositon,damping*Time.deltaTime);
        else
            transform.position = Vector3.MoveTowards(transform.position,wantedPositon,speed*Time.deltaTime);
    }
    
    //Fonction que tu utilisera avec tes autres scripts
    public void MoveTo(Vector3 position, bool lerped = false){
        useLerp = lerped;
        wantedPositon = position;
    }
}

fireboss_05
Messages : 2
Inscription : 19 Oct 2020 15:49

Re: Faire bouger un objet d'un point A à un point B

Message par fireboss_05 » 20 Oct 2020 12:16

Bonjour, j'ai essaayé ton script et je n'ai pas réussie a l'utiliser... je ne comprend pas sur qui le mettre, qui appel la fonction etc... (et je ne sais pas comment marche le script aussi...)
merci si tu arrives a m'aider :D

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

Re: Faire bouger un objet d'un point A à un point B

Message par boubouk50 » 20 Oct 2020 13:52

Salut,
(beau déterrage: +5 ans)
Il faut mettre ce script sur l'objet que tu veux déplacer.
Pour l'utiliser, il faut appeler la fonction MoveTo (Vector3 position, bool lerped = false) depuis un autre script ou le Start() par exemple. Tu renseignes la position (et le lerped mais ce n'est pas obligatoire) et ton objet commencera à se déplacer vers cette position à partir du moment de l'appel.
"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

fireboss_05
Messages : 2
Inscription : 19 Oct 2020 15:49

Re: Faire bouger un objet d'un point A à un point B

Message par fireboss_05 » 20 Oct 2020 18:23

Hey merci beaucoup, et je m'excuse pour le déterrage ^^, je n'ai pas vu de mention a ce sujet dans les règles alors je me suis permis. Je suis sur que des gens en auront besoin après moi :D

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

Re: Faire bouger un objet d'un point A à un point B

Message par Max » 20 Oct 2020 18:28

C'est un déterrage "utile" à priori, donc il n'y a pas de soucis.
C'est aussi le but du forum, d'avoir accès aux multiples sujets traités, et y trouver bien souvent des éléments de réponses à ses propres soucis/questionnements, même au sein de sujets datant de plusieurs années ;)
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
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: Faire bouger un objet d'un point A à un point B

Message par jmhoubre » 21 Oct 2020 00:54

Bonsoir,

je complète ex précisant que certaines méthodes ne semblent pas être appelées (cela trompe même Visual Studio qui les colorie comme si elles ne servaient pas). Ces méthodes sont entre autres Start, les Update, et les OnSomething (OnMouseOver, OnTrigger, ...).
C'est Unity qui se charge de les appeler quand certains événements surviennent : par exemple, OnMouseOver est appelée à chaque frame SI la souris est au-dessus d'un Collider.

Répondre

Revenir vers « (C#) CSharp »