为什么Physics2D为AddForce()与速度产生不同的结果?
问题描述:
为什么Gravity在Unity2D的Physics2D引擎中行为不同时,这两行代码是否交替执行?为什么Physics2D为AddForce()与速度产生不同的结果?
例如,我已经连接到我的球员精灵一个玩家控制器C#脚本:
private float speed = 500f;
RigidBody2D playerChar = null;
然后让我的性格步行:
Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0);
playerChar.AddForce(vec * speed);
和重力设为50
结果1:我的角色头像正常掉下来。
同时,当我做:
Vector2 vec = new Vector2 (Input.GetAxis("Horizontal"), 0);
playerChar.velocity = (vec * speed);
和重力仍设置为50
结果2:我的性格,现在需要较长时间下跌(它慢慢地“浮”下) 。
这是为什么?
答
这是因为你迫使刚体速度的y分量为零。
当你加力时,它加,它不会代替。
当您设置速度时,您将其设置为具有y值为0的Vector2,重力会在固定更新周期中启动并添加少量重力,导致您的播放器缓慢下降。然后更新再次发生,你再次强制y值回到0。
我不是一个统一开发者,但我的猜测是因为增加力量会增加你的加速度,而增加速度却不会。当你说你的角色漂浮时......它在开始的时候漂浮得慢些,漂浮的速度慢慢增加? – FredMan
它漂浮在一个缓慢的恒定速度。当我做AddForce()时,它会加速向下。 – YourWorstNightmare