凡客网站建设,wordpress恢复密码,网站建设需要的准备,有谁有做卫生纸巾的网站UI事件之Drag拖拽事件2.UGUI 事件命名空间 当我们需要使用 UGUI 中的事件的时候#xff0c;需要在脚本内引入专有命名空间#xff1a; using UnityEngine.EventSystems;----------------------------------2.拖拽相关事件接口----------------------------------1.三…UI事件之Drag拖拽事件2.UGUI 事件命名空间 当我们需要使用 UGUI 中的事件的时候需要在脚本内引入专有命名空间 using UnityEngine.EventSystems;----------------------------------2.拖拽相关事件接口----------------------------------1.三个拖拽事件相关接口 * IBeginDragHandler 开始拖拽事件处理器开始拖拽的一瞬间触发。 * IDragHandler 拖拽中事件处理器拖拽过程中持续触发。 * IEndDragHandler 结束拖拽事件处理器拖拽结束的一瞬间触发。----------------------------------扩展理解 这种“开始”“持续中”“结束”的模式在 Unity 的交互中是非常常见的。 我们之前的碰撞检测触发检测鼠标和键盘的按键检测都有这三个状态。----------------------------------2.接口使用步骤 ①当前脚本首先需要引入事件命名空间 EventSystems ②在当前类继承的父类的后方用逗号分隔写需要使用到接口名 ③鼠标放到接口名上右键--实现接口--实现接口 / 显示实现接口 ④编写相应事件的方法体先简单输出调试。----------------------------------3.通过拖拽事件改变图片位置 RectTransformUtility. / /RectTransform 工具类 ScreenPointToWorldPointInRectangle( //屏幕坐标点转化为世界坐标点 m_RectTransform, //游戏物体的 RectTransform ; eventData.position, //当前坐标位置点 eventData.enterEventCamera, //事件摄像机 out pos); //最终计算得到的世界坐标位置 PointerEventData指针事件数据。 上面的这个方法我们只需要写在“拖拽中事件”方法内将最终的 pos 位置值 持续赋值给当前游戏物体的 position 即可就可以实现拖拽改变图片的位置。实例 鼠标拖动游戏物体 //获取组件引用 m_RT gameObject.GetComponentRectTransform(); //得到实时坐标位置转化成3D坐标并返回一个位置变量 RectTransformUtility.ScreenPointToWorldPointInRectangle(m_RT,eventData.position,eventData.enterEventCamera,out pos); //赋值给游戏物体 m_RT.position pos;----------------------------------总结 继承接口实现接口写入处理代码实现效果。 把下面的代码保存到一个代码文件拖给一个游戏物体 using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;public class ItemDrag : MonoBehaviour ,IBeginDragHandler,IDragHandler,IEndDragHandler
{private RectTransform m_RT;void IBeginDragHandler.OnBeginDrag(PointerEventData eventData){print(IBeginDragHandler.OnBeginDrag);gameObject.GetComponentTransform().position Input.mousePosition;print(这是实现的拖拽开始接口);}void IDragHandler.OnDrag(PointerEventData eventData){print(IDragHandler.OnDrag);//虽然用Input.mousePosition可以得到一个2D坐标不过我们现在需要的是3D坐标看下面//gameObject.GetComponentTransform().position Input.mousePosition;//3D坐标获取方法Vector3 pos;m_RT gameObject.GetComponentRectTransform();//屏幕坐标到世界坐标RectTransformUtility.ScreenPointToWorldPointInRectangle(m_RT,eventData.position,eventData.enterEventCamera,out pos);m_RT.position pos;print(拖拽中……);}void IEndDragHandler.OnEndDrag(PointerEventData eventData){print(IEndDragHandler.OnEndDrag);gameObject.GetComponentTransform().position Input.mousePosition;print(实现的拖拽结束接口);}
} 如有错误欢迎指出。转载于:https://www.cnblogs.com/madinglin/p/8470961.html