2D横版角色移动-攻击-跳跃-冲刺-闪避
原视频教程
准备工作
将骨骼动画文件从DragonBones中导出之后,一共生成了3个文件:
- hero_ske.json 骨骼数据
- hero_tex.json tex定位数据
- hero_tex.png tex拼接图片
创建空节点作为hero,新增DragonBones组件,
将导出的json文件赋值到对应的位置:
角色移动与相机跟随
角色横向移动
角色横向移动,需要进行如下处理:
- 角色可以横向移动
- 相机跟随
- 方向改变
- 缓动
1 |
|
移动手柄
创建移动手柄
创建移动手柄UI组件:
新建rocker.ts脚本,用于控制控制器中移动手柄的操作:
1 |
|
控制玩家左右移动
手柄控制移动
关键点:
- 检测手柄移动坐标的x值
- 正值向右移动
- 负值向左移动
- 检测手柄的触摸结束和取消事件
- 取消时玩家停止行动
- 相机设置最大跟随参数
- 保留相机和玩家之间的一定移动距离
方向移动和停止
手柄每次监听到移动都触发玩家的方位判断
手柄脚本:
1 |
|
Hero脚本:
1 |
|
相机跟随
添加最大起始跟随距离,
对相机跟随速度进行缓动处理:
1 |
|
动画切换
需要给玩家添加状态机参数进行控制:
1 |
|
物理组件
物理组件
全局开启物理引擎:
1 |
|
给Hero和Ground地面添加物理碰撞检测组件,
同时给项目添加Hero和Ground的分组
开启2组之间的碰撞检测
由于之前Hero的移动是通过直接修改坐标实现的,
这里改为给Hero的刚体添加线性速度实现:
1 | heroMove(){ |
Hero跳跃
Jump
- 跳跃时,添加一个向上的线性速度
- 需要监听跳跃动画的播放
- 跳跃开始,播放跳跃动画
- 跳跃结束,需要回到奔跑或待机的状态
- 增加跳跃CD的设置
1 |
|
Hero 攻击
普通攻击动画
根据攻击间隔,
播放攻击动画
1 |
|
连招攻击
- 使用一个数组存放连招需要用的动画名字
- 引入一个连招CD用于判断角色每次攻击之间的时间间隔,
- 引入一个用于记录当前连招的变量
1 |
|
攻击检测
使用攻击范围和受击范围包围盒式检测,
需要知道如下参数:
- 攻击方 a
- 当前坐标 a.x, a.y
- 此时朝向 a.dir
- 正面攻击范围 a.aR.x_01
- 背面攻击范围 a.aR.x_02
- 攻击高度 a.aR.y
- 受击方 n
- 当前坐标 n.x, n.y
- 此时朝向 n.dir
- 正面受击范围 n.hR.x
- 背面受击范围 (此处和图不太一样,背面受击和正面受击设置一样的范围)
- 受击高度 n.hR.y
存在下面几种可能
已经知道玩家攻击方向朝左,就能知道玩家的攻击包围盒
存在碰撞的可能性有很多,一一判断比较麻烦,所以这里判断不会碰撞的情况
1 | let hit = !( |
1 | let hit = !( |
根据上面的判断条件,创建用于检测战斗检测的方法:
1 | /** |
Hero中用于进行击中检测的脚本:
1 |
|
Enemy中用于检测被击中的脚本:
1 | const ANI_GROUP = "normalGroup" |
对全局对象的扩充
由于像enemy、hero这种节点比较关键,全局都有可能会用到,
所以可以将他们集中挂载到window全局对象下,
先在根目录下加入global.d.ts文件用于覆写window的属性
1 | declare interface Window{ |
在全局挂载脚本game中加入如下代码:
1 |
|