unity 拖拽UI

这篇具有很好参考价值的文章主要介绍了unity 拖拽UI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们经常会使用拖拽UI的效果,untiy 为拖拽事件也提供了现成的API,我们只要简单的实现几个接口即可

我们用两种方式来实现拖拽代码,一种是使用MonoBehaviour里的方法,一种是实现UI事件接口,但不论是那种方法,拖拽的逻辑都是没有区别的。以下为拖拽核心代码

	//这是一个偏移量,如果没有这个偏移量,UI会直接吸附到鼠标的位置
   private Vector3 offset = new Vector3();

	//这是拖拽的代码
	transform.position = Input.mousePosition - offset; 

实现一:使用MonoBehaviour
这要求我们需要为UI设置一个2D碰撞盒,鼠标只有在碰撞盒内拖动才会触发事件,需要注意UI的一个像素就是1米,所以碰撞盒需要做的非常大,例如一个长宽都是100的图片,碰撞盒的size 是100*100
unity 拖拽UI
代码如下

    private void OnMouseDown()
    {
        print("开始拖拽");
        //按下鼠标计算鼠标和自己轴心的偏移量
        offset = Input.mousePosition - transform.position;
    }
    private void OnMouseDrag()
    {
        print("鼠标拖拽");
        transform.position = Input.mousePosition - offset; //拖拽
    }
    private void OnMouseUp()
    {
        print("结束拖拽");
    }

实现二:使用接口
需要先引入UI事件命名空间

using UnityEngine.EventSystems;

需要注意,想让UI事件生效,场景里必须有EventSystem这个物体,如果你发现UI没有反应,可能是误删了EventSystem,可以在新建的UI里新建一个

实现接口及拖拽代码如下

public class DragPanel : MonoBehaviour,IPointerDownHandler,IPointerUpHandler,IDragHandler
{
    
    private Vector3 offset = new Vector3();

    public void OnPointerDown(PointerEventData eventData)
    {
        print("开始拖拽");
        //按下鼠标计算鼠标和自己轴心的偏移量
        offset = Input.mousePosition - transform.position;
    }
    public void OnDrag(PointerEventData eventData)
    {
        print("鼠标拖拽");
        transform.position = Input.mousePosition - offset; //拖拽
    }
    public void OnPointerUp(PointerEventData eventData)
    {
		print("结束拖拽");
    }
}

开始拖拽和结束拖拽也可以使用 IBeginDragHandler,IEndDragHandler 这两个接口来实现文章来源地址https://www.toymoban.com/news/detail-507957.html

到了这里,关于unity 拖拽UI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity使用ConfigurableJoint实现物理拖拽物体

    我们如何在游戏中实现拖拽物体呢,如果仅仅是让拖拽坐标,可能没有物理效果,这里可以使用Joint来实现。 首先我们在场景中放置道具。 如图,我们放置一个圆柱体Cylinder,一个Sphere球体,和地面。 圆柱体就是我们要拖动的物体,红色球体是我们点击的位置,白色的地面放

    2023年04月08日
    浏览(37)
  • 2023-06-19 Untiy进阶 C#知识补充2——C#版本与Unity的关系

    一、Unity 与 C# 版本 Unity 版本 C# 版本 Unity 2021.2 C# 9 Unity 2020.3 C# 8 Unity 2019.4 C# 7.3 Unity 2017 C# 6 Unity 5.5 C# 4 ​ 更多信息可以在 Unity 官网说明查看:Unity - Manual: C# compiler (unity3d.com) ​ 之所以不同 Unity 版本支持的 C# 版本不同,主要是不同 Unity 版本使用的 C# 编译器和脚本运行时版

    2024年02月12日
    浏览(37)
  • 原生js实现拖拽效果

    2024年01月16日
    浏览(45)
  • vue3鼠标拖拽滑动效果

    第一步 在utils下面新建一个directives.js文件,然后引入如下代码 第二步 在main.js中引入  第三步 页面直接使用即可

    2024年02月11日
    浏览(40)
  • JS创建DIV,实现鼠标拖拽效果

    题目:用原生js动态创建一个div,大小随意,挂在body上,实现鼠标拖拽效果 需要用到的鼠标事件: 1.鼠标按下(onmousedown), 2.鼠标移动(onmousemove) 3.鼠标抬起(onmouseup) 第一步:创建容器(每个页面,最大的容器是body对象,所有dom对象创建后默认都会放到body) 第二步,

    2024年02月13日
    浏览(50)
  • untiy使用http下载资源

    部分API需要将Unity的 Edit/PrejectSetting/Player/OtherSetttings/AConfiguration/ApiCompatibilityLevel 设为.NetFramework 才可以使用

    2024年01月23日
    浏览(35)
  • echarts部分图表自带鼠标滚轮滑动整体缩放效果与拖拽整体移动效果,如何取消?

    部分echarts图表在可视区域自带鼠标滚轮缩放和拖拽移动效果。这个效果在部分场景中是多余的, 怎么将其效果取消呢? roam:true(可拖动,可缩放);false(不可拖动,不可缩放) dome Tips 实现满足上诉需求的属性即 roam。 部分echarts图表类型 不存在roam属性,即该类型图表不支

    2024年02月04日
    浏览(53)
  • 实现简单的element-table的拖拽效果

    第一步,先随便创建element表格 第二步,里面的数据源tableData直接复制饿了么上的 第三步,需要安装sortablejs库并且在头部引入 第四步,通过ref获取table,这里给table的ref设置为dragTable 第五步,就是获取table然后设置它的一些属性,比如拖拽时的CSS,拖拽时的一些事件等,然后

    2024年02月11日
    浏览(38)
  • 使用手柄控制Unity及效果展示(1)

    Unity支持手柄的控制,效果图如下所示: 这是一篇针对手柄控制U3D入门的过程记载,主要以实现功能为目的,分四个部分进行过程展示: Input System包的下载 设备的查找 Input Actions控件的使用 主要代码的解释及编写 这里也将我使用过程中遇到的问题和解决方法也用红字进行标

    2024年02月05日
    浏览(81)
  • Unity——使用铰链关节制作悬挂物体效果

    目的 在场景中创建一个悬挂的物体,是把多个模型悬挂在一起可以自由摇摆,类似链条的效果 效果图 前言 什么是铰链关节? 铰链关节 将两个刚体(Rigid body)组会在一起,从而将其约束为如同通过铰链连接一样进行移动。它十分适合门、链条、钟摆等模拟效果。 步骤 打开

    2023年04月24日
    浏览(96)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包