Hola gente, estaba haciendo unas pruebas para mover un personaje usando el código siguiente:
using UnityEngine;
using System.Collections;
public class mover : MonoBehaviour {
private Rigidbody _rb;
void Start ()
{
_rb = GetComponent<Rigidbody> ();
}
void Update ()
{
if (Input.GetKey(KeyCode.D))
{
_rb.velocity = new Vector3 (4, 0, 0);
}
if (Input.GetKey (KeyCode.A))
{
_rb.velocity = new Vector3 (-4, 0, 0);
}
}
}
No es que no funcione, es que sea cual sea su yaw siempre se desplaza en el eje X del mundo virtual. A lo que me refiero es cómo se podría hacer para que se desplazara horizontalmente según su orientación, no el del mundo virtual. Muchas gracias por la ayuda.
public class mover : MonoBehaviour {
private Rigidbody _rb;
public float fuerza = 4;
void Start ()
{
_rb = GetComponent<Rigidbody> ();
}
void FixedUpdate ()
{
if (Input.GetKey(KeyCode.D))
_rb.AddForce(_rb.transform.right * fuerza);
if (Input.GetKey (KeyCode.A))
_rb.AddForce(_rb.transform.right * -fuerza);
}
}
Cita de: TheBullet date=1493761311A parte, si utilizas un rigidbody tendrías que utilizar AddForce para mover el objeto
Cita de: lightbug date=1493764654No necesariamente, es valido tambien usar velocity para provocar cambios instantaneos en la velocidad, con force estas teniendo en cuenta la masa tambien, dependiendo del modo de fuerza aplicado.
_rb.AddForce(_rb.transform.right * fuerza, ForceMode.VelocityChange);
Cita de: TheBullet date=1493795856Tienes razón, si quiere que acelere de manera instantánea tendrá que utilizar velocity o AddForce de esta manera:
_rb.AddForce(_rb.transform.right * fuerza, ForceMode.VelocityChange);
Pero utilizar velocity no está aconsejado en algunas circunstancias porque las físicas dejan de ser reales, por ejemplo en este caso tendrá un comportamiento rarísimo porque cuando no se aprieten botones de movimiento y se rote el objeto mantendrá su inercia, pero si se rota y se apriete un botón de movimiento no habrá ningún tipo de inercia.
Cita de: TheBullet date=1493795856Eso si, para usar AddForce posiblemente tendrá que aplicar ForceMode.VelocityChange con key down para el primer impulso y después utilizar la fuerza de manera normal para mantener la velocidad mientras esté el botón pulsado no?