怎么开发自己的网站,wordpress fold主题,门户网站方案,资阳公司网站建设前篇#xff1a;Unity实战案例全解析#xff1a;RTS游戏的框选和阵型功能#xff08;4#xff09;阵型功能-CSDN博客 本案例来源于unity唐老狮#xff0c;有兴趣的小伙伴可以去泰克在线观看该课程 我只是对重要功能进行分析和做出笔记分享#xff0c;并未无师自通#x…前篇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;});}