找回密码
 立即注册
查看: 199|回复: 0

[简易教程] unity2d 完美的横版移动

[复制链接]
发表于 2022-5-8 07:22 | 显示全部楼层 |阅读模式
出自:Unity教程:2D横版移动跳跃完美手感(终极版/可多段跳)必看!_哔哩哔哩_bilibili
我在这给自己做个笔记
<hr/>获取按键的API,官方推荐放在Update里




这里是左右移动
这里逻辑改了


这里是【Raw】,所以返回-1,0,1,三个值,之前是先判断不等于0时执行的,这样会导致回去不到0的值。
这样,当键盘并没有按方向键的时候,小狐狸还是在上一帧的方向键作用下运行着,直到玩家下一次按键或者在摩擦力作用下匀减速停下。
下面写的是翻转的代码
这里也改了一下 把二维向量换为3维了


up这里没有解释的很清楚,大概是说,这三个坐标都会影响缩放,如果用Vector2不太好。
(emm啥都没说,就当玄学原因吧)


逻辑:正就向左翻转,负就向右翻转。
跳跃:
检测按键,jumpCount是二段跳用的


大概意思就是在update里接受玩家操作改变某个变量的值,在Fixed里根据这个变量进行操作。
值得注意的是 完成动作后,把这个变量改为false的操作应该是在fixed里完成。
update只负责接收玩家输入,至于判断各种状态,是否碰撞上,是否在空中,是否落地,都是在fixed里完成。
这里逻辑需要用到一个判断是否接触地面,
up是这样完成的:


给人物搞了个空的子物体放在脚底下,用这个方法来检测是否碰到地面所在的ground层。
(这里之所以不用小狐狸直接调用这个方法是因为,第一个参数,小狐狸的positon是模型中央,而我们需要的position是脚底下那个位置。所以说这里如果硬要用小狐狸也可以,给他再减个固定的position值就行了)
跳跃部分的代码:


逻辑:
--如果碰到地面,连跳计数器=2刷新,isJump不用细想,意思就是不在空中,这里是up为了让好多代码新手容易理解故意搞的,其实就是【!isGround】不在地面的意思。
--如果刚才update那里面按下了跳跃键,并且小狐狸在地面,那就起跳,isJump更新状态为在空中,刚体受力向上,可跳跃次数减一,注意这里【jumpPressed】回归false。我们动作结束的更新要放在fixed里面,不要在update里写判断是否起跳然后回归这种逻辑。
--如果按下了跳跃键且连跳数还有且在空中,就跳。和第二个if是一样的,up硬是拆成了在地面起跳和在空中起跳两个if来写。
我个人觉得直接:


只要计数器符合条件就能跳,管他在空中在地面呢。碰到地面刷新,我觉得没问题。

下面写一下动画逻辑。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-4-29 19:10 , Processed in 0.411767 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表