Jump to content
UnitySpain
zopas tv

ayuda con script de movimiento

Recommended Posts

muy buenas de nuevo, no me pasaba por aqui ya que no tenia ningun problema hasta ahora. El caso es que tengo un script de movimiento creado pero para sorpresa, al iniciar el proyecto el coche se buguea llendo para los lados y no para. 

¿me podeis ayudar?

using UnityEngine;
using System.Collections;

public class movimiento2 : MonoBehaviour {
	public float Velocidad = 10f;
	public 	Rigidbody rig;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		float tecladoVertical = Input.GetAxisRaw ("Vertical"); 
		float PosZ = transform.position.z + (tecladoVertical * Velocidad * Time.deltaTime);
		transform.position = new Vector3 (PosZ, transform.position.y, transform.position.x );

	}
}

 

Share this post


Link to post
Share on other sites

En la ultima linea deberia ser asi, por el orden Vector3(x,y,z)
 

transform.position = new Vector3 (transform.position.x, transform.position.y, PosZ);

Y por ultimo si tienes un rigibody como componente este puede afectar el moviemiento, desactivalo para descartar.

Share this post


Link to post
Share on other sites

yo creo que el script esta bien....

creo que podria ser cosa del rigidbody....

prueba a quitar el rigidbody al GameObject, (en el editor, "remove component") y borra la linea "public RigidBody rig;" (de momento, para probar) 

si sigue fallando sin el rigidBody ya no se que puede ser....

pero si al quitar el rigidbody va bien.... entonces seguramente seran las "constraints" del rigidbody... en el editor en el inspector del objeto, en el rigidbody clicka frezze rotation(check) y desclicka(uncheck) las freeze position.... o quizas tengas que clicar/desclicar alguna position... o la "use gravity"... 

Share this post


Link to post
Share on other sites
7 hours ago, zopas tv said:

¿me podeis ayudar?

primero lo que dijo @GSG3D, el orden es x,y,z. Seguro sea eso

Para agregar, si vas a sumar valores a un componente x o y o z podes hacer esto:

using UnityEngine;
using System.Collections;

public class movimiento2 : MonoBehaviour {
	public float Velocidad = 10f;
	public 	Rigidbody rig;
	
	void Start () {
	
	}
	
	
	void Update () {
		float tecladoVertical = Input.GetAxisRaw ("Vertical"); 

		//usa uno solo de estos...

		//si vas a modificar el X
		transform.position += Vector3.Right * tecladoVertical * Velocidad * Time.deltaTime;		

		//si vas a modificar el Y
		transform.position += Vector3.Up * tecladoVertical * Velocidad * Time.deltaTime;

		//si vas a modificar el X
		transform.position += Vector3.Forward * tecladoVertical * Velocidad * Time.deltaTime;
		
		//Vector3.Up, por ej ya esta definido en la estructura y significa <0,1,0>,
        //Es decir, sumas 0 en x y en z, y el valor que le pasaste en Y. Si se te complica visualizarlo asi es el algebra vectorial
      	// ademas te evitas el "new" , y haces todo directamente
      
      
      //tene en cuenta que te estas moviendo globalmente, no en la direccion del coche sino en la direccion del mundo, quizas te sirva
      //para tu caso, pero si cambias dos cosas en la escena nada te va a andar

	}
}

 

7 hours ago, Igor said:

prueba a quitar el rigidbody al GameObject, (en el editor, "remove component") y borra la linea "public RigidBody rig;" (de momento, para probar) 

con borrar la linea no hace nada :6_smile: jajaj. O lo puede borrar, o mejor aun hacerlo kinematico, si es que a futuro va a usar test de colision o cosas asi.

Share this post


Link to post
Share on other sites

gracias a todos me ha funcionado.

una pregunta : si quiero hacer que un coche al torcer rote, que tipo de quaternion uso??

Share this post


Link to post
Share on other sites
7 hours ago, zopas tv said:

gracias a todos me ha funcionado.

una pregunta : si quiero hacer que un coche al torcer rote, que tipo de quaternion uso??

Podes modificar un quaternion (matriz de rotacion) o directamente usar una funcion que lo haga, te recomiendo transform.Rotate:

https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

de la pag:

void Update()
    {
        // Rotate the object around its local X axis at 1 degree per second
        transform.Rotate(Vector3.right * Time.deltaTime);

        // ...also rotate around the World's Y axis
        transform.Rotate(Vector3.up * Time.deltaTime, Space.World);
    }

Una vez que rotes, no te va a andar todo lo anterior jajaja

Edited by lightbug

Share this post


Link to post
Share on other sites

ah!

jeje

no me fije el orden de las variables...  x,y,z, no z,x,y 

seguro sera eso

decia que la borrase la variable rig, porque si iba a "remove component" rigidbody paraprobar si era eso lo que fallaba, ya no iba a pintar nada la variable

pero si, lo mas seguro sea el orden de las variable...

Share this post


Link to post
Share on other sites

×
×
  • Create New...