全流程

代码结构

image-20211118234026519

技能模块

见技能篇:// TODO link

一些小功能的实现

摄像机跟随

要点是将 人物的位置 映射成 相机的位置。这里简单实现。

  1. 将相机的初始偏移值设置好,将角色初始位置能很好的放在中间显示。
  2. Update中进行position对齐
1
2
3
4
void FightMgr.Update(){
// transCameraRoot物体下有一个旋转调整过初始值的相机。
mapRoot.transCameraRoot.position = transFollow.position;
}

技能UI映射到地图

非指向技能1:后羿的2技能

要点是将 UI拖拽的位置 映射成 地图向量的位置。

  1. 将技能UI拖拽起始点做记录,根据 拖动的点 - 拖拽起始点 = dir 获得一个初始的Vector2值。
  2. 将dir进行映射,具体做法是方向直接用dir.x和dir.y来作为地图的x、z轴,y轴取0;距离用一个倍乘器乘dir的模。映射好放到一个Vector3里。
  3. 将映射好的Vector3,偏转45度,因为相机偏转,技能也一起偏转以便与UI拖拽的方向对其。
1
2
3
4
5
6
7
8
9
if (skillCfg.releaseMode == ReleaseModeEnum.Position)
{
// 从UI映射到地图
dir = BattleSys.Instance.SkillDisMultiplier * dir;
Vector2 clampDir = Vector2.ClampMagnitude(dir, skillCfg.targetCfg.selectRange);
Vector3 clampDirVector3 = new Vector3(clampDir.x, 0, clampDir.y);
clampDirVector3 = Quaternion.Euler(0, 45, 0) * clampDirVector3;// 这里的45度是相机偏移的45度
viewHero.SetSkillGuide(skillIndex,true,ReleaseModeEnum.Position,clampDirVector3);
}

非指向技能2:后羿的大招

也是映射,这个很简单,只要映射方向就行,最后偏转相机角度 + 规格化。
直接上代码:

1
2
3
4
5
6
else if (skillCfg.releaseMode == ReleaseModeEnum.Direction)
{
Vector3 dirVector3 = new Vector3(dir.x, 0, dir.y);
dirVector3 = Quaternion.Euler(0, 45, 0) * dirVector3;// 这里的45度是相机偏移的45度
viewHero.SetSkillGuide(skillIndex,true,ReleaseModeEnum.Direction,dirVector3.normalized);
}

2种非指向技能的完成图