为什么交替执行以下两行代码时,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/