c# - 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 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() 调用方式的评论后编辑)
推荐阅读
- javascript - 我如何在 react js 项目中使用 react form builder 2
- node.js - 如何以正确的方式将 rabbitMQ 实现到 node.js 微服务应用程序中?
- c++ - RapidXML 节点在 try catch 块中具有正确的值,但它在块外是 nullptr
- python - 带有散点图和 Pandas 的 Python seaborn 错误
- c++ - C++ 发送图像但似乎失败
- unicode - 显示名称中带有 unicode 字符的 SecondaryTile
- javascript - MySQL 表不会针对多个条目(JSON)进行更新,但可以针对 Nodejs 中 JSON 的单个条目进行更新
- html - 固定高度容器,可根据窗口高度调整大小
- python - 如何使用 tkinter 为 RadioBox 和 Slider 步骤设置指定位置
- assembly - 从 NASM 中的非阻塞标准输入读取