按【跳跃】键,穿过上方的盒子,站在盒子上
按【下】+【跳跃】键跳下当前站立的盒子
由于碰撞盒子的存在,角色上方有障碍物讲被阻挡跳跃。
我目前的实现思路是:判断两碰撞盒子之间的相对位置,如果盒子在主角下方,则临时关闭碰撞属性。
不过有少许bug。
那么游戏厂商是如何【优雅】地实现在碰撞盒子上下跳跃的呢?
按【跳跃】键,穿过上方的盒子,站在盒子上
按【下】+【跳跃】键跳下当前站立的盒子
由于碰撞盒子的存在,角色上方有障碍物讲被阻挡跳跃。
我目前的实现思路是:判断两碰撞盒子之间的相对位置,如果盒子在主角下方,则临时关闭碰撞属性。
不过有少许bug。
那么游戏厂商是如何【优雅】地实现在碰撞盒子上下跳跃的呢?
往上跳的时候把角色刚体关掉,下落的时候再开启
那么如果之前不能穿透的东西也会穿透了不是,比如问号砖
。
编辑地图的时候给包围盒或者物体一个标签,哪些标签的包围盒可以穿透,哪些不能穿透,碰撞的时候坐下判断就行了
按照你的设计,我脑子里预研一下:
如果跳得不够高,最高点没超过场景,肚子与场景在一条线,此时开始下降,打开刚体,【那么碰撞盒子会怎么处理】?
1、角色掉下来(复合宾尼兔的游戏风格)。
2、角色被碰撞到强行拉到场景上方(可能有一瞬间的不太维和)
3、角色被被碰撞盒子发生【左、右】【弹开】(没法接受)
待会写代码尝试看看效果
地图编辑器的gid我也在考虑,目前地图已经分了很多层了,【不知道以后还要分多少层】:
背景1层、背景2层、障碍层(墙壁)、可穿透障碍层、
npc层(会掉血的固定场景)
主业不是搞游戏的,游戏工程流还在摸索
换一个思路,走包围盒检测或者射线检测,检测下面的碰撞体,
每个碰撞体上的node挂脚本获取枚举类型。
比如 walkdownable/ climbable/ swimmable
我们再做一个基于FSM/Behavior Tree 的 State, 比如 “walk_down”, “walk_up”,“swim”
当满足state ===walk_down , 下方的射线/ 碰撞体检测的collider 是walkdownable,可以把碰撞体的分组设置成idled_wall,比如角色头顶还有个射线区检测idle,当idle的距离>0 时候,我们把idled_wall 再改成wall, 其他思路都类似
box2D的可定制性比较差,需要自己判断colider的位置,我们也可以用collider 的位置和刚体的位置得到方向向量,用方向向量去判定 collider 在头上,前面,还是下方
用状态机很容易实现
潜水的大牛也出来了。真棒
碰撞回调参数里面可以跳过这次碰撞,直接判断两个碰撞体坐标就行了
是滴,是滴,是滴