Unity中实现平台跳跃功能(不使用物理系统)

 本文仅供本人学习自用)

                                                                        1

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 4.动画控制器制作_哔哩哔哩_bilibili

移动层的基本逻辑 ↓

我们在动画中再建一个层,并默认连一个空状态。这样底层权重为1的跳跃层默认不会影响我们的移动层。
 在动画资源中,可以修改动画片段,只保留某一部分。
跳跃逻辑为上升-滞空-下落,所以只截取了完整动画片段中的一小部分。

null转跳跃,不需要等动画播放完,且过渡时间减少为0.1,用一个bool值isJump==true作为切换条件
跳跃转滞空,达到最高点,其实也就是跳跃动画播放完,所以不需要取消勾选,然后跳跃自动转滞空(后续写代码控制)
滞空转下落,则bool值 isFall==true来作为切换条件,滞空时间未知,所以不需要等待播放完毕,取消勾选。
下落转null,即isFall==fasle,且isJump==false时。经过测试,不需要等待下落动画播放完,直接切换回null。所以取消勾选

另外,从高台跳下时,我们应该直接下落。所以从null →下落。条件是isFall==true;当接触到地面时,又设回来,isFall==false。
当在下落过程中二段跳时,也需要再转回跳跃状态。连线无需过渡,且条件应为 isJump==true 和 isFall==false。

跳跃层的基本逻辑 ↓(其中JumpLayer层为本层,在RunLayer启用时,若启动了本层,会直接覆盖上层的动画。)

                                                                         2

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 5.角色移动逻辑_哔哩哔哩_bilibili

代码控制:  float h 应作为成员变量,避免在Update当中重复创建。

为-1时,即向左,我们让人物的旋转参数=(0,-90,0)。如果不确定,可以在游戏场景中实际测试一下。

顺带一提,transform.rotation是一个四元数,所有要先转换。

为0时则不会发生改变,仍然保持之前的朝向。

而移动时,不论朝向如何,玩家永远只是往自己的正前方进行移动。如果无关左右判断,仅需要判断是否有所移动即可。在我们设置条件时,不要使用额外的判断条件,而是使用移动参数本身。

当没有移动时,参数为0;当有移动时,参数不为0。

如果输入不是零,则移动,是零,则不移动。

使用#region和#endregion

让代码便于整理和阅读。后续在这里面添加逻辑即可。

                                                                         3

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 6.角色跳跃逻辑_哔哩哔哩_bilibili

目前为止,用到的变量。 随着时间的增加,当前速度会越来越小,直到为负值时下落。

在单次按下空格键时,设置isJump,而且给当前速度赋值,它为初始值,也就是最大的时候。

当动画状态为jump时(在播放跳跃动画时),角色往上移动。其中当前速度是要不断减小的,这样当速度小于0时就进入了下落状态。

如果我们触碰到地面,他就会停下来。

判断地面的条件是,当前平台的Y值,与我们unity的碰撞器+标签判断法不太相同。

public float nowPlatformY;(不写默认=0)

直接改transform。position。y是改不了的,所以需要中介值。

这一步是为了避免落地时“落到地里面”,把它的位置修正。这个平台Y值后期是会改变的。

还是同一条原则,不要使用过多的if判断,而是直接设置他的值,并且让他与条件自身相关,可以让代码耦合度大大降低,而且准确。

关于二段跳:使用一个int来记数即可。  跳一次就index++,并且只有按下空格且index!=2时才能执行跳跃逻辑,落地时index重新=0。

                                                                            4

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 7.影子逻辑相关_哔哩哔哩_bilibili

                                                                             5

平台逻辑,当玩家x值在平台的左右坐标之间,并且y轴大于等于平台的y轴(高度)时,就认为玩家是可以落到这个平台上面的。

使用Gizmos类,OnDrawGizmos 函数。可以在编辑器模式下绘制图形,达到数据可视化。

【唐老狮】Unity中实现平台跳跃功能(不使用物理系统)— 10.平台数据类_哔哩哔哩_bilibili调用里面的绘制方法,需要两个参数,起始点和结束点。

因为两个都是Vector3类型,所以不能直接使用宽高变量(float

有的平台有影子,有的平台可以主动跳下,脚本定义一个公开的bool,在外界根据不同的平台去勾上就好了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值