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

Unity实战案例全解析:RTS游戏的框选和阵型功能(3)生成范围检测框 +重置框选操作

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

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

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

本案例的实现流程图 

本文实现效果 

分析

生成范围检测的框自然要用到范围检测

unity保姆级教程之 范围检测Physics.Overlap_unity overlap-CSDN博客

如何确定这个框的大小尺寸?

首先来看一下范围检测生成框效果

看起来要从Center入手,来看上视图的平面图,要确定这个center的x-z平面位置

通过射线检测获取范围检测的中心点

是否可以得到鼠标的开始和结束位置,将二者的距离除以2不就是center了吗,至于Y深,可以自己设定

 if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo, 1000, 1 << LayerMask.NameToLayer("Ground")))
 {
     //范围检测用的中心点 (由于 摄像机 朝向 是世界坐标系正方向 没有旋转 所以我们可以这样做)
     Vector3 center = new Vector3((hitInfo.point.x + beginWorldPos.x) / 2, 1, (hitInfo.point.z + beginWorldPos.z) / 2);
     //范围检测 盒装的 长宽高的一半
     Vector3 halfExtents = new Vector3(Mathf.Abs(hitInfo.point.x - beginWorldPos.x) / 2, 1, Mathf.Abs(hitInfo.point.z - beginWorldPos.z) / 2);
     //得到 这个盒装范围内的 所有碰撞器
     Collider[] colliders = Physics.OverlapBox(center, halfExtents);

得到检测范围内所有的士兵

这时候就可以创建一个士兵的存储容器

    //选择到的士兵对象 存储在该容器
    private List<SoldierObj> soldierObjs = new List<SoldierObj>();

再通过临时变量得到  SoldierObj obj,将每一个士兵的脚本信息加入到容器中

  //soldierObjs.Count < 12 是 设置的 选择上限 最多只能选择12个士兵
  for (int i = 0; i < colliders.Length && soldierObjs.Count < 12; i++)
  {
      SoldierObj obj = colliders[i].GetComponent<SoldierObj>();
      if (obj != null)
      {
          obj.SetSelSelf(true);
          soldierObjs.Add(obj);
      }
  }

当下一次选择的时候 需要清除表

 //清空选择
 for (int i = 0; i < soldierObjs.Count; i++)
     soldierObjs[i].SetSelSelf(false);
 soldierObjs.Clear();


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

相关文章:

  • MySQL进阶篇 - 存储引擎
  • 硬件-开关电源-结构组成及元件作用
  • visual studio2022添加新项中没有html和css
  • 深入理解人工智能:从机器学习到深度学习
  • 过渡到内存安全语言:挑战和注意事项
  • 机器学习西瓜书笔记(十三) 第十三章半监督学习+代码
  • 软件工程-软件测试
  • [Notepad++] 文本编辑器的下载及详细安装使用过程(附有下载文件)
  • python-斐波那契词序列/最大回文乘积/求最大最小k个元素
  • EasyCVR视频汇聚平台:解锁视频监控核心功能,打造高效安全监管体系
  • C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点
  • java将mysql表结构写入到word表格中
  • 小程序-全局数据共享
  • 【Linux系统编程】权限
  • 广联达 Linkworks办公OA Service.asmx接口存在信息泄露漏洞
  • LeetCode 704. 二分查找
  • 2024年09月CCF-GESP编程能力等级认证C++编程一级真题解析
  • @antv/x6 嵌入结点到父节点中时,进行检测,查看当前节点是否是父结点,如果是父结点,不可以嵌入到父结点中,实现方法一。
  • 【AIGC】内容创作——AI文字、图像、音频和视频的创作流程
  • PHP反序列化7(字符串逃逸)