glantucan / puzzle_game

A small Unity basics review example and start point to go to a modular design
1 stars 1 forks source link

Duda Ejercicio_19 #6

Open alijahanmard opened 8 years ago

alijahanmard commented 8 years ago

Hola! Intento hacer el ejercicio 19, y tengo problema con normalizar el vector para que la velocidad que defino no afecte a la magnitud del vector.

public class Script_19 : MonoBehaviour {

    public float v ;
    private Vector3 direction;  
    public Vector3 pasaPosition;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        this.direction = (this.pasaPosition - this.transform.position);
        Vector3 velocity = (v * direction) * Time.deltaTime;
        this.transform.position = velocity + this.transform.position;

    }
}

Ahora mismo con este codigo funciona bien pero el objeto se para al llegar a las cordenadas de "pasaPosition". para normalizar la direccion lo que se me ocurre es añadir: this.direction = this.direction.normalized; no me da error, pero tampoco soluciona el problema. igual me estoy equivocando en todo xD.

Gracias.

glantucan commented 8 years ago

Estás mezclando varias cosas: Primero, Tu gameobject se mueve, pero no con la velocidad que introduces en el inspector, sino con v * direction.magnitude y tu direction.magnitude no vale 1. El vector al que llamas direction es en realidad la distancia entre tu posición y la posición por la que debes pasar, así que deberías llamarla distance para no confundirte. A la hora de calcular la velocidad, necesitas un vector de dirección. El vector distancia tiene la dirección correcta, pero no la longitud correcta. Por eso lo que hacemos es obtener:

direction = distance.normalized;

Ahora, como direction tiene longittud uno podemos multiplicarlo por v para obtener el vector velocity. Así tendrá la dirección correcta y una longitud igual a v:

velocity = direction * v;

Esta velocidad estaría bien calculada.

Segundo, La velocidad en este ejercicio es constante. Es decir, no cambia con el tiempo. O sea, que deberías calcularla en el Start() y sólo usarla en el Update().

Lo que te está ocurriendo es que cuando el cubo sobrepasa el punto por el que ha de pasar, tu vector direction se invierte y el cubo retrocede. En el siguiente fotograma se ha vuelto a pasar al retroceder y direction se vuelve a invertir y así sucesivamente. Si te acercas podrás ver tu cubo oscilando rápidamente alrededor del punto por el que ha de pasar.

CUIDADO!!!: En este ejercicio tienes que controlar el movimiento del cubo desde un sctipt que no está en el cubo. Deberías tener el script en un gameobject vacío llamado Vectores19, y por tanto deberías cambiar el código en consecuencia.