Unity 不会像编码那样增加那么多的力量



这可能是一个愚蠢的问题,但是当我按w/s键时,播放器对象几乎没有移动。它会动,但只是一个很小的但是。我的代码与A/D键几乎相同,这些键工作良好,并按预期推动玩家。这在逻辑上是说不通的。我是否更改了设置来执行此操作?请让我知道。

代码:

void FixedUpdate() // FixedUpdate() is better with unity's physics engine.
{ 
if (Input.GetKey("d"))
{
rb.AddForce(100, 0, 0 * Time.deltaTime); 
}
if (Input.GetKey("a"))
{
rb.AddForce(-100, 0, 0 * Time.deltaTime); 
}
if (Input.GetKey("s"))
{
rb.AddForce(0, 0, -100 * Time.deltaTime); 
}
if (Input.GetKey("w"))
{
rb.AddForce(0, 0, 100 * Time.deltaTime); 
}
if (Input.GetKey("space"))
{
rb.AddForce(0, 40, 0 * Time.deltaTime); 
}
}

Rigidbody.AddForce ()默认情况下,将应用相对于Fixed Time.deltaTime给定的力。意思是你的力已经被乘以time . deltatime .意思是,AddForce()被调用在一个固定的增量时间步长,并且已经占,你不需要在Rigidbody.AddForce()中添加它,除非你正在使用过载AddForce(Vector3 force, ForceMode模式= ForceMode. force),并且正在使用不同的ForceMode.

因此,作为一个例子,在你的代码中,不要使用:

if (Input.GetKey("s"))
{
rb.AddForce(0, 0, -100 * Time.deltaTime); 
}

请随意使用

if (Input.GetKey("s"))
{
rb.AddForce(0, 0, -100); 
}

(编辑后derHugo关于AddForce()调用方式的注释

最新更新