zoukankan      html  css  js  c++  java
  • 鼠标移动UI位置

    代码如下:

     1 using UnityEngine;
     2 using UnityEngine.EventSystems;
     3 using System.Collections;
     4 using System;
     5 
     6 /// <summary>
     7 /// 鼠标移动UI位置
     8 /// </summary>
     9 public class UIMoveMouse : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
    10 {
    11 
    12     private RectTransform canvas;          //得到canvas的ugui坐标
    13     private RectTransform selfRect;        //得到UI对象的ugui坐标
    14     Vector2 offset = new Vector3();    //用来得到鼠标和UI对象的差值
    15 
    16     // Use this for initialization
    17     public virtual void Start()
    18     {
    19         selfRect = GetComponent<RectTransform>();
    20         canvas = InventoryManager.Instance.Canvas;
    21     }
    22 
    23    
    24     //当鼠标开始拖动时调用
    25     public void OnBeginDrag(PointerEventData eventData)
    26     {
    27         Vector2 mouseDrag = eventData.position;    //记录鼠标按下时的屏幕坐标
    28         Vector2 mouseUguiPos = new Vector2();   //定义一个接收返回的ugui坐标
    29         //RectTransformUtility.ScreenPointToLocalPointInRectangle():把屏幕坐标转化成ugui坐标
    30         //canvas:坐标要转换到哪一个物体上,这里img父类是Canvas,我们就用Canvas
    31         //eventData.enterEventCamera:这个事件是由哪个摄像机执行的
    32         //out mouseUguiPos:返回转换后的ugui坐标
    33         //isRect:方法返回一个bool值,判断鼠标按下的点是否在要转换的物体上
    34         bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDrag, null, out mouseUguiPos);
    35         if (isRect)   //如果在
    36         {
    37             //计算UI对象中心和鼠标点的差值
    38             //anchoredPosition: 相对于锚点参考点,这个重新变换的枢轴位置。
    39             offset = selfRect.anchoredPosition - mouseUguiPos;
    40         }
    41     }
    42     //当鼠标拖动时调用   对应接口 IDragHandler
    43     public void OnDrag(PointerEventData eventData)
    44     {
    45         Vector2 mouseDrag = eventData.position;   //当鼠标拖动时的屏幕坐标
    46         Vector2 uguiPos = new Vector2();   //用来接收转换后的拖动坐标
    47         //和上面类似
    48         bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDrag, null, out uguiPos);
    49 
    50         if (isRect)
    51         {
    52             //设置UI对象的ugui坐标与鼠标的ugui坐标保持不变
    53             selfRect.anchoredPosition = offset + uguiPos;
    54         }
    55     }
    56     //当鼠标结束拖动时调用   对应接口  IEndDragHandler
    57     public void OnEndDrag(PointerEventData eventData)
    58     {
    59         offset = Vector2.zero;
    60     }
    61 }
  • 相关阅读:
    jenkins 简单实现php集成上线部署
    关于PHP7
    关于版本迭代的那些事
    confirmit中手机端不能直接给input设置disabled属性
    confirmit中Html Styles有一处bug(或者说是一个坑)
    vsCode快捷键大全
    vscode打不开文件夹或文件夹未响应
    js中排序方法sort() 和 reverse()
    js最简单的编写地点
    js对象转换为json格式时,js对象属性中有值为null和undefined注意事项
  • 原文地址:https://www.cnblogs.com/luoyanghao/p/8603779.html
Copyright © 2011-2022 走看看