2016-11-08 1 views
1

Je travaille sur une application de jeu avec Unity. J'ai un problème quand il s'agit de déplacer un GameObject.Déplacement d'un objet avec vector3.MoveToward

Dans mon jeu, lorsque le joueur glisse avec son appareil, le gameobject se déplace d'un point A à B, et quand il glisse vers le bas, il en va de B à A.

J'ai écrit un script C# avec la logique du jeu, mais j'ai un problème quand il s'agit de cela.

Le problème est que le gameobject déplace instantanément de A à B.

Voici la ligne de code que j'utilise pour déplacer mon gameobject:

transform.localPosition = Vector3.MoveTowards (PositionA,PositionB,Time.deltaTime * speed); 

speed est un flotteur avec une valeur de 10.0f . Je voudrais que mon GameObject se déplace lentement vers les points A et B. Et malgré les changements sur la valeur de vitesse, rien ne change, il bouge toujours instantanément.

Comment puis-je résoudre ce problème? (J'ai essayé avec Vector3.Lerp et j'ai eu les mêmes résultats).

Répondre

3

Vector3.MoveTowards prend la position actuelle, la position cible et le pas, mais il semble que votre premier argument ici soit l'origine du mouvement, plutôt que la position actuelle. Normalement, vous devriez le faire quelque chose comme ça, dans votre Update():

transform.localPosition = Vector3.MoveTowards (transform.localPosition, PositionB, Time.deltaTime * speed);

avec la position actuelle comme premier argument.

+0

quand je l'ai écrit votre ligne, il se déplace en douceur dans un premier temps et ensuite instantanément à la position B (à 50% de la distance). Aussi, quand je balaye, il ne veut pas retourner au point A. –

+0

@ Ophélia Hm? Je n'ai pas Unity installé, donc je ne peux pas tester maintenant, mais cela devrait fonctionner. Changez-vous la position de transformation ailleurs, ou quelque chose? Et pour aller vers A, vous devez changer la cible vers laquelle vous vous dirigez. – Koneke

+1

ça marche maintenant! :) merci beaucoup :) –

4

Voici comment utiliser MoveTowards:

void Update() 
{ 
    float step = speed * Time.deltaTime; 
    transform.position = Vector3.MoveTowards(transform.position, PositionB, step); 
} 

LearnMore

+0

merci beaucoup! :) à votre façon, ça marche aussi :) –