欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Unity实战案例全解析:RTS游戏的框选和阵型功能(5)阵型功能 优化

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

2024/10/26 9:23:23 来源:https://blog.csdn.net/2301_77947509/article/details/142664189  浏览:    关键词: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;});}

 


 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com