参考https://www.cnblogs.com/Firepad-magic/p/6012957.html
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SelectTest : MonoBehaviour
{
public List<GameObject> characters;
public Color rectColor = Color.blue;
public Color outlineColor = Color.white;
private Vector3 start = Vector3.zero;//记下鼠标按下位置
// private Material rectMat = null;//画线的材质 不设定系统会用当前材质画线 结果不可控
public Material rectMat = null;//这里使用Sprite下的defaultshader的材质即可
private bool drawRectangle = false;//是否开始画线标志
/// <summary>
/// 是否为虚线
/// </summary>
public bool IsDotted=true;
void Start()
{
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
drawRectangle = true;//如果鼠标左键按下 设置开始画线标志
start = Input.mousePosition;//记录按下位置
}
else if (Input.GetMouseButtonUp(0))
{
drawRectangle = false;//如果鼠标左键放开 结束画线
}
if (drawRectangle)
{
CheckSelection(start, Input.mousePosition);
}
}
private void FixedUpdate()
{
}
void OnPostRender()
{
//画线这种操作推荐在OnPostRender()里进行 而不是直接放在Update,所以需要标志来开启
//需要挂在相机上,如果不想挂相机上,可以将这里面的代码放在OnGUI里
if (drawRectangle)
{
Vector3 end = Input.mousePosition;//鼠标当前位置
GL.PushMatrix();//保存摄像机变换矩阵,把投影视图矩阵和模型视图矩阵压入堆栈保存
if (!rectMat)
return;
rectMat.SetPass(0);//为渲染激活给定的pass。
GL.LoadPixelMatrix();//设置用屏幕坐标绘图