Unity 鼠标批量选择物体

来源:互联网 发布:淘宝商品id在哪里看 编辑:程序博客网 时间:2024/05/18 02:50


/// <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;    }}


0 0