我有一个想要不使用W前进的对象(例如here in this video),并且像视频一样,我使用AddForce来做到这一点:
public float forwardForce = 200f;
private void FixedUpdate()
{
rb.AddForce(forwardForce * Time.deltaTime, 0, 0);
}
但是我希望每次我按下“ A” /“左”时对象都会向左旋转90度(反之亦然,也就是向右),并希望该对象将其推向当前的方向转身。
我是编码的新手,所以请提供帮助。
答案 0 :(得分:0)
首先,在FixedUpdate中使用Time.deltaTime会产生意外的结果。使用Time.fixedDeltaTime代替它。然后,此代码将执行您想要的操作。
private void Update()
{
if(Input.GetKeyDown(KeyCode.A)
{
transform.Rotate(new Vector3(0, 0, 90), Space.Self);
}
else if(Input.GetKeyDown(KeyCode.D)
{
transform.Rotate(new Vector3(0, 0, -90), Space.Self);
}
}
private void FixedUpdate()
{
rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}
但是,如果您使用此方法移动对象,则当您旋转时,它还将继续移动先前的位置。也许您可以通过这种方式修复它。
private void Update()
{
if(Input.GetKeyDown(KeyCode.A)
{
transform.Rotate(new Vector3(0, 0, 90), Space.Self);
rb.velocity = rb.velocity.magnitude*transform.forward;
}
else if(Input.GetKeyDown(KeyCode.D)
{
transform.Rotate(new Vector3(0, 0, -90), Space.Self);
rb.velocity = rb.velocity.magnitude*transform.forward;
}
}
private void FixedUpdate()
{
rb.AddForce(transform.forward * forwardForce * Time.fixedDeltaTime);
}