【问题标题】:Why does Physics2D produce different results for AddForce() versus velocity?为什么 Physics2D 对 AddForce() 与速度产生不同的结果?
【发布时间】:2017-12-18 03:50:22
【问题描述】:

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

例如,我在我的播放器精灵上附加了一个播放器控制器 C# 脚本:

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

然后让我的角色行走

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

重力设置为 50

结果一:我的角色头像正常跌倒。

当我这样做的时候:

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

并且重力仍然设置为 50

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

为什么会这样?

【问题讨论】:

  • 我不是统一开发人员,但我的猜测是因为增加力会增加你的加速度,而增加速度不会。当你说你的角色漂浮时……它是不是一开始漂浮得比较慢,然后慢慢增加它的漂浮速度?
  • 它以缓慢的恒定速度漂浮。当我执行 AddForce() 时,它会向下加速。

标签: c# unity3d game-development


【解决方案1】:

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

当你加力时,它,它不会替换。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-25
    • 2023-03-14
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多