Unity进阶提升-2D游戏跳跃手感优化(跳起下落)

在进行2D游戏开发时,跳跃是不可缺少的一个重要功能。但是我们在Unity开发时Unity本身的物理引擎并不能提供很好的的手感,下落的时候轻飘飘的,这操作起来显然非常不舒服。所以,我们需要自己对跳跃进行优化,以此来获得更好的手感。我们不难发现,在绝大多数2D游戏的跳跃中,下落的速度比上升的速度要快上很多,下落的用时是上升的一半左右。

提示,在优化跳跃时,将使用刚体组件

首先,我们需要对Unity物体跳跃阶段进行分析:

图中,跳跃共分为两个阶段,第一阶段就是跳起,人物上升阶段,第二阶段就是下落阶段

在第一阶段中,刚体向上速度为正,即velocity.y>0;第二阶段下落,物体的velocity.y<0,所以我们可以通过velocity.y的正负来确定物体所处哪一个阶段,进而对物体可以有更精确的操作。

接下来,我们就要对物体跳跃阶段进行操作,首先我们需要判定物体受否在面上,并且按下了W或其它跳跃按键,触发跳跃后,我们给物体的velocity.y赋一个初始值V,代表初始速度,那么最终跳跃高度的变化为h=Vt-1/2gt2(g为重力加速度,t为时间),物体速度velocity.y=V-gt,当velocity.y=0时,物体到达最高点,此时物体高度(最高点)H=(V2)/(2g)。

接下来,物体仍然受到重力加速度的作用,物体速度velocity.y的值继续减小,变为了负值,而这也标志着物体开始下落。从图中可以看出当物体只具有一个向上的初速度并且只受重力时,它的上升时间和下落时间是一样的,T=V/g。所以,我们为了确保下落用时是上升的一半,所以我们需要改变物体的重力加速度,使它变为原来的二倍,即修改Physics2D.gravity的值,使它的y的值乘2。

这样我们就完成了一个跳跃的优化。代码如下:

//提示!本代码使用射线检测物体是否位于地面
//提示!各变量含义
//rb                   刚体组件
//jumpSpeed            跳跃初始速度
//fullSpeed            下落重力加速度倍数
//isGround             玩家是否在地面
//rayDistance          射线距离
//groundLayerMask      地面的图层
void Update()
    {
        Ground();
        if (Input.GetKeyDown(KeyCode.W) && isGround)
        {
            Jump();
        }
        if (rb.velocity.y <= 0)
        {
            Full();
        }
    }
    private void Jump()
    {
        rb.velocity = Vector2.up * jumpSpeed;
    }
    private void Full()
    {
        //重力加速度变为fullSpeed倍
        Physics2D.gravity = new Vector2(0, -9.8f * fullSpeed);
    }
    //射线检测,是否在地面
    private void Ground()
    {
        // 从物体下方投射一条射线,看它是否与地面碰撞
        RaycastHit2D hit=
        Physics2D.Raycast(transform.position,Vector2.down,rayDistance,groundLayerMask);
        if (hit.collider != null)
        {
            isGround = true;
        }
        else
        {
            isGround = false;
        }
    }

本文作者:清风扶云雾

本文链接:https://www.cnblogs.com/CloudAndMist/p/17794105.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   清风扶云雾  阅读(769)  评论(2编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 起风了 买辣条也用券
  2. 2 年少有为 李荣浩
  3. 3 我爱你不问归期 白小白
  4. 4 我走后 小咪
  5. 5 热铁皮房顶的夏天 王赫野
  6. 6 Dear John 比莉
年少有为 - 李荣浩
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 李荣浩

作曲 : 李荣浩

编曲 : 李荣浩

制作人 : 李荣浩

电视一直闪

电视一直闪

电视一直闪

电视一直闪

联络方式都还没删

你待我的好

我却错手毁掉

也曾一起想

有个地方睡觉吃饭

可怎么去熬 日夜颠倒

连头款也凑不到

墙板 被我砸烂

到现在还没修

一碗热的粥

你怕我没够

都留一半带走

给你形容

美好今后 你常常眼睛会红

原来心疼我

我那时候不懂

假如我年少有为 不自卑

懂得什么是珍贵

那些美梦

没给你 我一生有愧

假如我年少有为 知进退

才不会让你替我受罪

婚礼上 多喝几杯

和你现在那位

也曾一起想

也曾一起想

有个地方睡觉吃饭

可怎么去熬 日夜颠倒

连头款也凑不到

墙板 被我砸烂

到现在还没修

一碗热的粥

你怕我没够

都留一半带走

给你形容

美好今后 你常常眼睛会红

原来心疼我

我那时候不懂

假如我年少有为 不自卑

懂得什么是珍贵

那些美梦

没给你 我一生有愧

假如我年少有为 知进退

才不会让你替我受罪

婚礼上 多喝几杯

和你现在那位

假如我年少有为 不自卑

尝过后悔的滋味

金钱地位

搏到了却好想退回

假如我年少有为 知进退

才不会让你替我受罪

婚礼上 多喝几杯

和你现在那位

在婚礼上 多喝几杯

祝我年少有为

吉他 : 李荣浩

吉他 : 李荣浩

贝斯 : 李荣浩

鼓 : Alex

和声编写 : 李荣浩

和声 : 李荣浩

弦乐编写 : 李荣浩

弦乐 : 国际首席爱乐乐团

录音师 : 李荣浩

混音师 : 李荣浩

录音室 : 北京一样音乐录音室

混音室 : 北京一样音乐录音室

母带制作 : 李荣浩

母带工程师 : 周天澈TC Z.

母带后期处理录音室 : TC Faders

OP : 一样音乐工作室

SP : 酷亚音乐 (深圳) 有限公司 admin by One Asia Music Inc. 酷亚音乐股份有限公司