当前位置: 首页 > news >正文

Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化

前篇:Unity实战案例全解析:RTS游戏的框选和阵型功能(4)阵型功能-CSDN博客

本案例来源于unity唐老狮,有兴趣的小伙伴可以去泰克在线观看该课程

我只是对重要功能进行分析和做出笔记分享,并未无师自通,吃水不忘打井人

本案例的实现流程图 

兵种排序 

 首先

在一个阵型中,我们希望远程兵可以在近战兵后面,所以就需要区分不同兵种类

枚举变量很合适

public enum SoldierType
{Hero,       //英雄Warrior,    //战士Archer,     //猎人Magician,   //魔法师Loong,      //龙
}

其次

定义其在容器中的顺序,因为布局的时候是按照容器中的顺序拿出来一个一个排列的
因为士兵容器是List,所以List方法里面的Sort就很合适

soldierObjs.Sort((a, b) => {if (a < b)return -1;else if (a > b)return 1;elsereturn 0;
});

然后

现在士兵的移动行为并不完善,当整体移动的时候会出现这种情况

而我实际想要的是,这样队伍会有限寻找最近的点去匹配

所以还需要规定一个角度和距离的问题,实现起来并不难所以直接看代码吧

  //判断队伍新朝向和队伍老朝向之间的夹角//新朝向:(hitInfo.point - soldierObjs[0].transform.position).normalized//老朝向:soldierObjs[0].transform.forward 我们把之前的第一个士兵的面朝向作为了 阵型老朝向//两个朝向之间的夹角大于60度 我们就对士兵列表重新进行排序if( Vector3.Angle((hitInfo.point - soldierObjs[0].transform.position).normalized, soldierObjs[0].transform.forward) > 60 ){//满足条件后 重新进行士兵的排序//优先 兵种排序//其次 才是 距离排序soldierObjs.Sort((a, b) => {//优先兵种排序if (a.type < b.type)return -1;else if (a.type == b.type){//只有兵种相同时 才会以离目标点距离进行排序if (Vector3.Distance(a.transform.position, hitInfo.point) <= Vector3.Distance(b.transform.position, hitInfo.point))return -1;elsereturn 1;}elsereturn 1;});}

 


 


http://www.mrgr.cn/news/40204.html

相关文章:

  • Unity实战案例全解析:RTS游戏的框选和阵型功能 总结
  • 【小程序】小tips:微信小程序登录后返回登录前的页面继续操作(保留参数)
  • 心理咨询预约管理系统(含源码+sql+视频导入教程)
  • C语言——动态内存分配
  • 数据预处理:数据挖掘的第一步
  • LORA模型与基座大模型合并并由transformer的AutoModel推理
  • Linux编译部署PHP环境
  • 浅谈W11Edge浏览器登录不上问题解决方案
  • 海信新风空调小氧吧X7:解锁母婴级标准认证的防直吹神器
  • JS网页设计案例
  • 各种莫队算法
  • 谷歌收录查询工具,如何选择适合自己的谷歌收录查询工具
  • OpenGL ES 索引缓冲区(4)
  • Mysql知识点整理
  • TCP CUBIC 曲线对 BIC 折线的拟合
  • BCJR算法——卷积码的最大后验译码
  • c++11~c++20 结构化绑定
  • HTTP状态码全解
  • CaChe的基本原理
  • [Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)