Unity 鼠标批量选择物体
2014-06-03 18:27
405 查看
/// <summary> /// 鼠标选择物体 /// </summary> public class TestControl { Vector3 mBtnDownPos = Vector3.zero; List<LineRenderer> lines = new List<LineRenderer>(); List<GameObject> cubes = new List<GameObject>(); public void Init() { GameObject prefabLine = Resources.Load<GameObject>("Line"); for (int i = 0; i < 4; i++) { lines.Add((GameObject.Instantiate(prefabLine) as GameObject).GetComponent<LineRenderer>()); } GameObject _cubes = GameObject.Find("Cubes"); for (int i = 0; i < _cubes.transform.childCount; i++) { cubes.Add(_cubes.transform.GetChild(i).gameObject); } } public void Update() { //按下 if (Input.GetMouseButtonDown(0)) { foreach (LineRenderer line in lines) line.renderer.enabled = true; mBtnDownPos = Helper.GetMouseWorldPos(new Plane(Vector3.up, Vector3.zero)); lines[0].SetPosition(0, mBtnDownPos); lines[3].SetPosition(0, mBtnDownPos); } //持续 if (Input.GetMouseButton(0)) { Vector3 mouseWorldPos = Helper.GetMouseWorldPos(new Plane(Vector3.up, Vector3.zero)); Vector3 pos1 = new Vector3(mBtnDownPos.x, 0, mouseWorldPos.z); Vector3 pos3 = new Vector3(mouseWorldPos.x, 0, mBtnDownPos.z); lines[0].SetPosition(1, pos1); lines[3].SetPosition(1, pos3); lines[1].SetPosition(0, mouseWorldPos); lines[2].SetPosition(0, mouseWorldPos); lines[1].SetPosition(1, pos1); lines[2].SetPosition(1, pos3); DelectSelect(mBtnDownPos, mouseWorldPos, pos1, pos3); } //放开 if (Input.GetMouseButtonUp(0)) { foreach (LineRenderer line in lines) line.renderer.enabled = false; foreach (GameObject c in cubes) c.renderer.material.SetColor("_TintColor", Color.blue); } } //检测是否选中 void DelectSelect(Vector3 v1, Vector3 v2, Vector3 v3, Vector3 v4) { Vector3 leftUp; Vector3 rightDown; FindPoint(out leftUp, out rightDown, v1, v2, v3, v4); foreach (GameObject c in cubes) { if (c.transform.position.x > leftUp.x && c.transform.position.x < rightDown.x && c.transform.position.z < leftUp.z && c.transform.position.z > rightDown.z) { c.renderer.material.SetColor("_TintColor", Color.green); } else { c.renderer.material.SetColor("_TintColor", Color.blue); } } } //找出左上角和右下角 void FindPoint(out Vector3 leftUp, out Vector3 rightDown, Vector3 v1, Vector3 v2, Vector3 v3, Vector3 v4) { List<Vector3> point = new List<Vector3>(); point.Add(v1); point.Add(v2); point.Add(v3); point.Add(v4); point.Sort((a, b) => { if (a.x > b.x) return 1; if (a.x < b.x) return -1; return 0; }); leftUp = point[0]; rightDown = point[3]; point.Sort((a, b) => { if (a.z > b.z) return 1; if (a.z < b.z) return -1; return 0; }); leftUp.z = point[3].z; rightDown.z = point[0].z; } }
相关文章推荐
- unity通过鼠标批量删除(隐藏)物体
- 【Unity快速实现小功能】快速添加一个鼠标点击物体的识别功能
- Unity物体跟随鼠标点的位置自动寻路
- unity实现鼠标经过时ui及物体的变色
- unity 鼠标拖拽物体(二)
- Unity 鼠标拖动场景内的物体
- Unity 物体在屏幕内跟随鼠标移动
- unity 在鼠标点击位置生成物体
- Unity中物体如何移动到鼠标点击位置
- Unity鼠标自由查看3D物体之直接旋转物体
- unity 3d 鼠标旋转物体脚本
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- Unity从UI拖物体到场景中以及鼠标拖动物体
- Unity 物体跟随鼠标点击移动,判断物体是否在移动
- unity实现鼠标让物体绕世界Y轴旋转_C#
- Unity中鼠标左键按下,拖拽物体移动
- Unity中鼠标左键按下,拖拽物体移动
- unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果
- unity 2d鼠标拖动卡牌运动,发现鼠标与物体的实际运行位置不一致
- Unity 物体根据鼠标移动而转动