首先新建一个Image,给Imag选一个系统自带的图像,就是第一个属性,最好是不要选圆形的,因为这里的代码没有给圆形的去空(会导致框选效果有差别),其他的都可以,选中之后有一个Fill Center的属性,勾选,这时候就会发现Iamge的中心是空的,就一个边,给大小设置为0,锚点的中心点调0,接着就可以挂载脚本了
if (Input.GetMouseButtonDown(0))
{
startPos = Input.mousePosition;
isDrap = true;
}
if(isDrap)
{
Vector2 size = new Vector2(Mathf.Abs(Input.mousePosition.x - startPos.x), Mathf.Abs(Input.mousePosition.y - startPos.y));
rectTransform.sizeDelta = size;
float mixX = (Input.mousePosition.x < startPos.x ? Input.mousePosition.x : startPos.x) - Screen.width / 2;
float mixY = (Input.mousePosition.y < startPos.y ? Input.mousePosition.y : startPos.y) - Screen.height / 2;
rectTransform.anchoredPosition = new Vector2(mixX,mixY);
}
if (Input.GetMouseButtonUp(0))
{
isDrap = false;
SelectPlayer();
rectTransform.sizeDelta = Vector2.zero;
}
在抬起鼠标后进行选人效果,通过遍历一个父节点下的子物体也就是我生成的人物,去显示选中效果
public void SelectPlayer()
{
selects.Clear();
for (int i = 0; i < playerbox.childCount; i++)
{
Vector3 pos = camera.WorldToScreenPoint(playerbox.GetChild(i).position);
Rect rect = new Rect(rectTransform.anchoredPosition+new Vector2(Screen.width/2,Screen.height/2), rectTransform.sizeDelta);
if(rect.Contains(new Vector2(pos.x,pos.y))&&playerbox.GetChild(i).transform.tag!="Enemy")
{
playerbox.GetChild(i).Find("ring").gameObject.SetActive(true);
selects.Add(playerbox.GetChild(i).gameObject);
}
else
{
playerbox.GetChild(i).Find("ring").gameObject.SetActive(false);
}
}
}
这里显示人物下的一个圆环,这个根据个人情况进行调整
选中效果如下