您当前的位置: 首页 >  游戏

真的没事鸭

暂无认证

  • 4浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

unity2D横版游戏跳跃实时响应

真的没事鸭 发布时间:2022-07-14 16:56:02 ,浏览量:4

如果我们把移动,跳跃等操作都放在Update函数里面我们会发现有时候我们按下跳跃键的时候角色并不会响应,对手感有很大的影响,所以我们结合Update和FixedUpdate实现准确的跳跃响应。

我们知道我们角色的移动,跳跃操作一般都要放在每一帧都要执行的函数里,每一帧执行的函数有很多,比如Update,LateUpdate,FixedUpdate等。LateUpdate我们暂且不提,简单说一下另外两个。

首先是Update,每一帧都会调用Update函数,这是帧更新的主要函数,但是我们要知道,对于不同的电脑每一秒执行的帧数是不一样的,比如一些比较老的电脑一秒执行30帧,好一点的电脑一秒执行40帧,所以为了要让不同的电脑也能实时的检测按键的响应,我们就要用到FixedUpdate函数。

FixedUpdate是一个固定的时间来执行的,如果没有修改的情况下是0.02秒执行一次FixedUpdate函数,也就是说一秒钟执行50次,我们也可以修改间隔时间,但是注意,这个值只是一个请求,机子可能达不到这个速度。因此,Update和FixedUpdate其实是完全独立的两个函数。当Update执行了一次时,FixedUpdate可能已经执行了两次、三次甚至一次都没有执行过。根据官方手册,所有和物理有关的都会放在FixedUpdate里面,比如Rigidbody。

我们介绍Update和FixedUpdate就是因为实现完美跳跃就是需要通过这两个函数实现的,我们把GetButtonDown放在Update里能够确保在不同的机器上我们按下跳跃键的时候,电脑可以给我们一个实时的那一帧的调用这个按键的反馈。而FixedUpdate会在固定时间执行,来检测按键按下的这个命令是否被执行。所以通过结合Update和FixedUpdate来实现这个操作。

using UnityEngine;
 
public class Test:MonoBehaviour{
bool action = false;
private Rigidbody2D rb;
public float jumpForce; 
void Start(){
rb=GetComponent();
}
    void Update(){
         if(Input.GetKeyDown(KeyCode.Space)){
             action = true;
         }
    }
    void FixedUpdate(){
       if(action){
           rb.velocity=new Vector2(rb.velocity.x,jumpForce);
           action = false;
        }
    }
}

上面,我们用一个boolean值来控制开关。由于Update每一帧都会调用,因此可以保证所有的输入都可以被响应。

当然这只是一份伪代码,因为我们并没有考虑地面或者多段跳等情况,所以具体的代码还有具体情况分析 

关注
打赏
1663134582
查看更多评论
立即登录/注册

微信扫码登录

0.0487s