unity 框选目标
创始人
2024-05-24 09:32:12
0

先制作选框:

创建一个Image,给Sourece Image随便添加一张方形图片,如果添加圆的出来就是圆,这个看情况而定,然后勾掉Fill Center这样就镂空了

这种框选一般都是作为组件存在所以代码要做成单例类,默认情况下隐藏选框,在鼠标托拽时也要修改宽高,在需要时也要显示出来故此代码如下:

    public RectTransform rectTransfrom;//这个对象是创建image选框,关联上即可public static UIMgr Instance//单例{get;private set;}// Start is called before the first frame updatevoid Start(){Instance = this;}// Update is called once per framevoid Update(){}public void SetRectangle(Vector2 pos,Vector2 size){rectTransfrom.gameObject.SetActive(true);//显示对象rectTransfrom.position = pos;//中心点位置赋值rectTransfrom.sizeDelta = size;//长宽赋值}public void HideRectangle(){rectTransfrom.gameObject.SetActive(false);//隐藏对象}

 在进行操作时要想两个问题:

1、什么时候显示和隐藏

2、显示时如何跟随鼠标进行计算

        if (Input.GetMouseButtonDown(0)) //当鼠标按下去时进行显示并且进行计算{_isDrang = true;//显示_startPos = Input.mousePosition;//实时获取鼠标位置(开始位置)}if (_isDrang){_endPos = Input.mousePosition;//实时获取鼠标位置(结束位置)Vector2 center=(_startPos+_endPos)/2; //中心的位置var size = new Vector2(Mathf.Abs(_endPos.x-_startPos.x),Mathf.Abs(_endPos.y-_startPos.y));//绝对值算边框 长 宽UIMgr.Instance.SetRectangle(center,size);//这个目标对象要做单例,将数据传递,显示对象_selectRect= new Rect(center-size/2,size);//为框选目标对象做准备,获取框选范围}

当鼠标抬起时

         if (Input.GetMouseButtonUp(0)){_isDrang = false;//对象归正UIMgr.Instance.HideRectangle();//隐藏对象}

接下来时选中目标对象:

先给目标个组件:要单例   获取选中的目标对象并返回

注意这里的对象要是选中目标的父级对象进行关联,通过父级查找子集对象进行选中,在这一步相当于是获取了所有可选中对象进行遍历查找,通过直接获取父级对象缩小了我们遍历查找的范围,这样再某种程度上节约了性能。

 public Transform[] GetAllSelectsUnites(){List result = new List();foreach (Transform trans in Solider){result.Add(trans);}return result.ToArray();//下面被注释掉的是简写,与上面意思一致(用rider的)//return Solider.Cast().ToArray();}

然后返回到框选操作中:

             var  allUnity=GameMgr.Instance.GetAllSelectsUnites();//这里是上面的单例组件var mainCamera = Camera.main;//获取相机组件,不建议在这里获取性能不好foreach (var unit in allUnity)//遍历所有返回对象{var screenPos =mainCamera.WorldToScreenPoint(unit.position);//选取相机视角内对象,进一步节省性能if (_selectRect.Contains(screenPos))//从框选范围内选取所有对象{Debug.Log(unit.name);//测试输出对象名称}}

github全代码(有注释):GetbadEarlyup/Dynamic-rendering-grid---box-selected-object-navigation: Dynamic rendering grid + box selected object navigationDemo (github.com)icon-default.png?t=N176https://github.com/GetbadEarlyup/Dynamic-rendering-grid---box-selected-object-navigation

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...