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

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;
    else
        return 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;
              else
                  return 1;
          }
          else
              return 1;
      });
  }

 


 


http://www.kler.cn/news/331767.html

相关文章:

  • Spring框架:Spring Core、Spring AOP、Spring MVC、Spring Boot、Spring Cloud等组件的基本原理及使用
  • 指针学习笔记
  • 安卓使用memtester进行内存压力测试
  • Spring Boot框架:新闻推荐系统开发新趋势
  • 检索器--
  • Keepalived+MySQL 高可用集群
  • 【QT Quick】基础语法:基础类与控件
  • 汽车追尾为什么是后车的责任?
  • ip 地址查看cmd命令
  • Mysql(索引与事务)
  • 用ChatGPT做数据分析与挖掘,爽!
  • 使用transformers调用owlv2实现开放目标检测
  • 数据结构:并查集
  • Axure大屏可视化模板在不同领域中的实际应用案例
  • 基于物联网的智能环境监测系统(论文+源码)
  • Redis数据库与GO(一):安装,string,hash
  • HUAWEI WATCH GT 系列安装第三方应用
  • 【正则表达式】粗浅学习
  • Linux编辑器Vim与Nano之全面比较
  • 【60天备战2024年11月软考高级系统架构设计师——第36天:系统安全设计——数据加密】