unity中UI组件跟随鼠标移动

给要移动的UI组件挂载

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class DragByInterface : MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler//接口 鼠标拖拽中 开始拖拽 结束拖拽  用于UI界面
{
    RectTransform rectTransform;//ui位置
    CanvasGroup canvasGroup;

    void Start() 
    {
        rectTransform=GetComponent<RectTransform>();
        canvasGroup = GetComponent<CanvasGroup>();
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        canvasGroup.blocksRaycasts= false;//射线检测关闭
    }

    public void OnDrag(PointerEventData eventData)
    {
        //位置跟着鼠标动
        rectTransform.anchoredPosition+=eventData.delta;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        canvasGroup.blocksRaycasts= true;//射线检测开始
    }
    public void DebugLogObject()
    {
        Debug.Log("拖draw");
    }


}

选中的UI显示在最上方

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class DragWindow : MonoBehaviour, IDragHandler,IBeginDragHandler
{
    RectTransform rectTransform;//ui位置

    void Start()
    {
        rectTransform=GetComponent<RectTransform>();
    }
    public void OnDrag(PointerEventData eventData)
    {
        //位置跟着鼠标动
        rectTransform.anchoredPosition+=eventData.delta;//
    }

    public void OnBeginDrag(PointerEventData eventData)
    {
        rectTransform.SetAsLastSibling();//将渲染等级移动到最后面 显示在最前面
    }
}

移动世界坐标系中的物体

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

public class Draw2DSprite : MonoBehaviour
{
    SpriteRenderer spriteRenderer;
    int startNmber;

    private void Awake()
    {
        spriteRenderer= GetComponent<SpriteRenderer>();
          startNmber=  spriteRenderer.sortingOrder;
    }

    /// <summary>
    /// 
    /// 鼠标事件要有Collier才行
    /// </summary>
    private void OnMouseDrag()//unity内置鼠标拖拽 用于2d,和3d场景
    {
        //缺少z轴,会移动位置不对
        //  Vector2 cursorPor = Camera.main.ScreenToViewportPoint(Input.mousePosition);//将鼠标屏幕坐标转为世界坐标
        //  transform.position=new Vector2(cursorPor.x, cursorPor.y);

        //获取需要移动物体的世界转屏幕坐标
        Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);
        //获取鼠标位置
        Vector3 mousePos = Input.mousePosition;
        //因为鼠标只有X,Y轴,所以要赋予给鼠标Z轴
        mousePos.z = screenPos.z;
        //把鼠标的屏幕坐标转换成世界坐标
        Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos);
        //控制物体移动
        transform.position = worldPos;




    }
    private void OnMouseEnter()//unity内置鼠标进入时
    {
        transform.localScale+= Vector3.one*0.07f;//放大物品缩放
        spriteRenderer.sortingOrder=10;//渲染顺序排到10级 比1级  显示在屏幕前方
    }
    void OnMouseExit()
    {
        transform.localScale-= Vector3.one*0.07f;//减小物品缩放
        spriteRenderer.sortingOrder=startNmber;
    }
}

UI组件接受其他物体的信息

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

public class Slot : MonoBehaviour, IDropHandler//检测拖拽事件(OnDrag)放下的操作
{
    public void OnDrop(PointerEventData eventData)
    {
        Debug.Log("获得物体信息");
        // eventData.pointerDrag. 获得拖拽物体信息
        eventData.pointerDrag.GetComponent<RectTransform>().anchoredPosition=GetComponent<RectTransform>().anchoredPosition;
        eventData.pointerDrag.GetComponent<DragByInterface>().DebugLogObject();
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值