我遵循一些指南,从我所看到的使用更新功能是一件好事的跳转行动,但当我这样做的更新发送我到一个不同的位置。
跳转相关函数:
void Update(){
if(dead == false){
if(Input.GetKeyDown(KeyCode.Space)){
if(OnGround == true){
r.velocity = new Vector2(r.velocity.x, jumpForce * time.deltaTime);
}
}
}
}
从互联网上搜索我发现了以下内容,但他们没有帮助我这么多option1和option2
主要是它把我移到不同的位置或者把我跳得太高或太低,从来没有一个好的适当的跳跃,我真的不知道该怎么做,有什么想法吗?
2条答案
按热度按时间ao218c7q1#
直接指定速度时不应使用
Time.deltaTime
,Time.deltaTime
的值取决于帧速率,帧速率可能会抖动,抖动会继承到跳跃中,因此可以获得准随机速度和跳跃高度。AddForce
函数通常用于跳转,从技术上讲,这是正确的方法,但我知道很多人更喜欢您的方法,无论如何,我将在这里提供它作为参考。b4lqfgs42#
虽然你的代码是正确的,我建议使用
Rigidbody.AddForce(Vector3 force);
,或者如果你使用刚体2dRigidbody2D.AddForce(Vector2 force);
而不是r.velocity=...
。为了更容易调试-你可以为力创建一个公共变量,并在播放模式下调整它,直到你得到满意的结果。