参见英文答案 >
Unity3d Local Forward 2个
我正在努力制作一个统一的游戏,这个游戏使用汽车.我想要移动汽车,到目前为止我可以向前和向后移动它,我也可以向左和向右旋转它们,这两个动作都很好.
但是在我向右旋转之后,我试图让它向前移动,它朝着与之前相同的方向移动,而不考虑刚刚进行的转弯.它使它移动就像向前移动一侧旋转.我一直试图使用前向矢量的值,但我的尝试都没有产生好的结果.如果有人有一些好主意我很乐意听到他们.
public class CarMovement : MonoBehaviour
{
public Rigidbody rb;
public Transform car;
public float speed = 17;
Vector3 forward = new Vector3(0, 0, 1);
Vector3 backward = new Vector3(0, 0, -1);
Vector3 rotationRight = new Vector3(0, 30, 0);
Vector3 rotationLeft = new Vector3(0, -30, 0);
void FixedUpdate()
{
if (Input.GetKey("w"))
{
rb.MovePosition(car.position + forward * speed * Time.deltaTime);
}
if (Input.GetKey("s"))
{
rb.MovePosition(car.position + backward * speed * Time.deltaTime);
}
if (Input.GetKey("d"))
{
Quaternion deltaRotationRight = Quaternion.Euler(rotationRight * Time.deltaTime);
rb.MoveRotation(rb.rotation * deltaRotationRight);
}
if (Input.GetKey("a"))
{
Quaternion deltaRotationLeft = Quaternion.Euler(rotationLeft * Time.deltaTime);
rb.MoveRotation(rb.rotation * deltaRotationLeft);
}
}
}
后来编辑:我问这个问题的原因是我不知道向量car.forward与我写的静态向量不同.在评论中解释后,我不明白我做错了什么.
最佳答案 您可以使用transform.Translate()代替rb.MovePosition().它使用Transform而不是Rigidbody移动一个对象,你也可以重载这个方法,并选择相对于空间或自身移动一个对象,更多
here.这是工作版本
public Rigidbody rb;
public Transform car;
public float speed = 17;
Vector3 rotationRight = new Vector3(0, 30, 0);
Vector3 rotationLeft = new Vector3(0, -30, 0);
Vector3 forward = new Vector3(0, 0, 1);
Vector3 backward = new Vector3(0, 0, -1);
void FixedUpdate()
{
if (Input.GetKey("w"))
{
transform.Translate(forward * speed * Time.deltaTime);
}
if (Input.GetKey("s"))
{
transform.Translate(backward * speed * Time.deltaTime);
}
if (Input.GetKey("d"))
{
Quaternion deltaRotationRight = Quaternion.Euler(rotationRight * Time.deltaTime);
rb.MoveRotation(rb.rotation * deltaRotationRight);
}
if (Input.GetKey("a"))
{
Quaternion deltaRotationLeft = Quaternion.Euler(rotationLeft * Time.deltaTime);
rb.MoveRotation(rb.rotation * deltaRotationLeft);
}
}