首页 > 解决方案 > 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); 
    }
}

标签: c#unity3d

解决方案


Rigidbody.AddForce()默认情况下,将应用相对于 Fixed Time.deltaTime 给出的力。这意味着您的力量已经乘以 Time.deltaTime。 意思是,AddForce() 在固定的增量时间步长中被调用并且已经被考虑,并且你不需要在 Rigidbody.AddForce() 中添加它,除非你使用重载 AddForce(Vector3 force, ForceMode mode = 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() 调用方式的评论后编辑)


推荐阅读