Unity UGUI实现鼠标拖动图片

简介: 在 Unity UGUI 中实现鼠标拖动图片功能,主要涉及事件检测、坐标转换和物体位置更新。根据鼠标移动量更新图片位置。代码示例展示了如何通过这些步骤实现拖动效果。

在 Unity UGUI 中实现鼠标拖动图片的功能,其核心原理主要涉及到事件检测、坐标转换以及物体位置更新,下面为你详细介绍整个过程:

  1. 事件检测
    借助 Unity 提供的事件系统来捕捉鼠标的交互动作,特别是鼠标按下、拖动和释放这几个关键事件。要实现此功能,需让脚本继承特定的接口,这些接口定义了相应的事件处理方法。具体如下:
    IPointerDownHandler:该接口用于处理鼠标按下事件,当鼠标按下图片时,会触发 OnPointerDown 方法。
    IDragHandler:用于处理鼠标拖动事件,在鼠标拖动过程中,会持续调用 OnDrag 方法。
    IPointerUpHandler:处理鼠标释放事件,当鼠标释放时,会调用 OnPointerUp 方法。
  2. 坐标转换
    由于鼠标在屏幕上的坐标是屏幕空间坐标,而 UGUI 中的 UI 元素使用的是画布空间坐标,因此需要进行坐标转换,将鼠标的屏幕坐标转换为 UI 元素所在的画布坐标。可以使用 RectTransformUtility.ScreenPointToLocalPointInRectangle 方法来完成这一转换。
  3. 物体位置更新
    在鼠标拖动过程中,根据鼠标的移动量来更新图片的位置。通过计算鼠标在当前帧相对于上一帧的偏移量,将这个偏移量应用到图片的位置上,从而实现图片跟随鼠标移动的效果。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
/// <summary>
/// **************************UGUI拖动图片,脚本挂在Image上即可*********************************
/// </summary>
public class TuoDongWuPin : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
    //需要被实例化的与制体
    //public GameObject YuSheWu;
    //实例化后的对象
    private Image img;
    Vector3 offPos;//存储按下鼠标时的图片-鼠标位置差
    Vector3 arragedPos; //保存经过整理后的向量,用于图片移动
    /// <summary>
    /// 开始拖拽的时候
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
     , eventData.enterEventCamera, out arragedPos))
        {
            offPos = transform.position - arragedPos;
        }
    }
    /// <summary>
    /// 拖拽中
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = offPos + Input.mousePosition;
    }
    /// <summary>
    /// 拖拽结束
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData)
    {
        transform.position = transform.parent.transform.position;
    }
}
相关文章
|
1月前
|
人工智能 定位技术 C#
【Unity3D实例-功能-移动】通过鼠标点击进行角色移动
本文介绍了如何在Unity中实现鼠标点击控制角色移动的功能。通过安装导航网格、设置地图与角色、烘焙路径及编写脚本,带领读者一步步构建角色自动寻路系统,增强游戏交互体验。
100 0
|
7月前
|
图形学
Unity UGUI拖拽移动
本文介绍了两种UI拖拽实现方式:精准拖拽和克隆拖拽。精准拖拽通过计算鼠标点击点与UI中心的偏移量,使UI跟随鼠标移动,适用于需要精确控制的场景。代码中通过`IBeginDragHandler`、`IDragHandler`和`IEndDragHandler`接口实现拖拽逻辑。克隆拖拽则在拖拽时克隆一个UI对象,使其跟随鼠标移动,适合视觉效果需求较高的场景。代码中同样使用上述接口,并在拖拽结束时销毁克隆对象。具体实现可参考提供的代码示例。
299 10
|
7月前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
7月前
|
图形学
unity判断鼠标在不在UI上
在 Unity 中,判断鼠标是否在 UI 上主要依赖事件系统和射线检测机制。Unity 的事件系统负责处理输入事件,GraphicRaycaster 组件用于检测射线与 UI 元素的相交情况。通过 `EventSystem.current.IsPointerOverGameObject()` 方法可轻松判断鼠标是否在 UI 上。对于移动端,使用 `EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId)` 来判断触摸是否在 UI 上。代码实现简单且高效。
|
7月前
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
7月前
|
图形学 开发者
unity 获取鼠标跟键盘
在 Unity 中,鼠标和键盘输入的获取依赖于底层操作系统的输入系统。操作系统捕获硬件事件(如鼠标的移动、点击及键盘按键),并将其转化为输入事件。Unity 通过 Input 类封装这些事件,使开发者能便捷地访问鼠标和键盘数据。例如,`Input.GetAxis` 方法用于获取鼠标滚轮、X/Y 轴移动及键盘方向键的输入,简化了开发流程。 代码示例展示了如何使用 `Input.GetAxis` 获取鼠标滚轮、左右和上下移动,以及键盘的方向键输入,并根据这些输入进行相应的处理和物体移动。
|
7月前
|
图形学 开发者
unity 从工具栏拖动生成物体
在 Unity 中实现从工具栏拖动生成物体的功能,基于编辑器扩展、事件系统和预制体实例化。通过自定义编辑器窗口、处理鼠标事件(按下、移动、释放)及使用 Instantiate 方法,可实现拖动并生成预制体物体。代码示例展示了如何检测鼠标事件并在指定位置实例化物体。
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
|
10天前
|
机器学习/深度学习 人工智能 图形学
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
卓伊凡的第一款独立游戏-详细介绍游戏开发引擎unity-以及详细介绍windows和mac的安装步骤【01】
77 9
|
10天前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。