c# - 为什么 Physics2D 会针对 AddForce() 与速度产生不同的结果?

标签 c# unity3d game-development

为什么交替执行以下两行代码时,Unity2D Physics2D 引擎中的 Gravity 行为不同?

例如,我已将播放器 Controller C# 脚本附加到我的播放器 Sprite :

private float speed = 500f;
RigidBody2D playerChar = null;

然后让我的角色行走:

Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0);
playerChar.AddForce(vec * speed);

Gravity 设置为 50

结果一:我的角色头像正常掉落。

与此同时,当我这样做时:

Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0);
playerChar.velocity  = (vec * speed);

Gravity 仍然设置为 50

结果 2:我的角色现在需要很长时间才能掉落(它会慢慢“漂浮”下来)。

这是为什么?

最佳答案

这是因为您强制刚体速度的 y 分量为零。

当你增加力量时,它增加,而不是取代。

设置速度时,您专门将其设置为 y 值为 0 的 Vector2,然后重力开始固定更新周期并添加少量重力,导致玩家缓慢下落。然后更新再次发生,您再次将 y 值强制回 0。

关于c# - 为什么 Physics2D 会针对 AddForce() 与速度产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47861900/

相关文章:

c# - ASP.NET 从 VStudio 发送电子邮件运行速度很快,但在 IIS 中运行速度很慢

c# - 统一 3D : Game Object interaction

java - 创建多个 JButton(数百个)会在创建它们时产生巨大的延迟

unity3d - Unity 上的项目路径无效

javascript - 使用 Tensorflow.js 开发游戏 AI

c# - WebClient.DownloadFileTaskAsync() 实际上永远不会超时吗?

c# - c#中的序列乘法

c# - Datagridview 单元格值变化更新数据库

c# - 从 Unity 检查互联网连接

android - Unity创建移动图案背景