Unity实现鼠标框选功能

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DrawRect : MonoBehaviour
{
    public static DrawRect Instance;

    public DrawRect()
    {
        Instance = this;
    }


    public Image m_Image;

    Vector3 startPos;
    Vector3 endPos;


    public static event Action<Vector2, Vector2,Vector2> OnRectDrawEvent;

    /// <summary>
    /// 返回为true / false
    /// </summary>
    public static event Func<bool> OnRectDrawCompletedEvent;
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            startPos = Input.mousePosition;
            m_Image.transform.position = startPos;
        }
        else if (Input.GetMouseButton(0))
        {
            endPos = Input.mousePosition;

            if (endPos.x>startPos.x&&endPos.y>startPos.y)
            {
                m_Image.rectTransform.pivot = new Vector2(0,0);
                m_Image.rectTransform.sizeDelta = endPos - startPos;
                OnRectDrawEvent?.Invoke(startPos, endPos, new Vector2(0, 0));
            }
            else if (endPos.x < startPos.x && endPos.y < startPos.y)
            {
                m_Image.rectTransform.pivot = new Vector2(1, 1);
                m_Image.rectTransform.sizeDelta =  startPos-endPos;
                OnRectDrawEvent?.Invoke(startPos, endPos, new Vector2(1, 1));
            }
            else if(endPos.x > startPos.x && endPos.y < startPos.y)
            {
                m_Image.rectTransform.pivot = new Vector2(0, 1);
                m_Image.rectTransform.sizeDelta = new Vector2(Mathf.Abs(endPos.x-startPos.x),Mathf.Abs(endPos.y-startPos.y));
                OnRectDrawEvent?.Invoke(startPos, endPos, new Vector2(0, 1));
            }
            else
            {
                m_Image.rectTransform.pivot = new Vector2(1, 0);
                m_Image.rectTransform.sizeDelta = new Vector2(Mathf.Abs(endPos.x - startPos.x), Mathf.Abs(endPos.y - startPos.y));
                OnRectDrawEvent?.Invoke(startPos, endPos, new Vector2(1, 0));
            }
        }
        else if (Input.GetMouseButtonUp(0))
        {        
            m_Image.rectTransform.sizeDelta = new Vector2(0,0);
            startPos.x = 0;
            startPos.y = 0;
            //bool isFocusFaith = OnRectDrawCompletedEvent();

        }
    }


}

 

posted @ 2024-11-18 11:20  SummerTrainnn  阅读(18)  评论(0编辑  收藏  举报