Unity 鼠标拖拽功能

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

继承3个处理拖拽方法的接口IBeginDragHandler, IDragHandler, IEndDragHandler

 /// <summary>
    /// 实现接口的OnBeginDrag方法,处理开始拖拽时要做的事情
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        startPosition = transform.position;//获取初始位置
        imageFather = transform.parent;//获取父物体的transform
        transform.SetParent(canvas.transform);//将物品放在canvas最下方,确保不会被遮挡
        canvasGroup.blocksRaycasts = false;//射线可以穿透物体
    }
/// <summary>
    /// 实现接口的OnDrag方法,处理拖动中要做的事情
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        transform.position = screenPositionToWorldPositionBy_Z(Input.mousePosition, transform.position);
    }
/// <summary>
    /// 通过基准点的Z点坐标,转化屏幕坐标为世界坐标
    /// </summary>
    /// <param name="needToFixedScreenPosition">需要转化的屏幕坐标</param>
    /// <param name="baseWorldPosition">基准点(需要它的z点坐标做转换)</param>
    Vector3 screenPositionToWorldPositionBy_Z(Vector3 needToFixedScreenPosition, Vector3 baseWorldPosition)
    {
        Vector3 baseScreenPosition = Camera.main.WorldToScreenPoint(baseWorldPosition);
        needToFixedScreenPosition.z = baseScreenPosition.z;
        return Camera.main.ScreenToWorldPoint(needToFixedScreenPosition);
    } 

 文章来源地址https://www.toymoban.com/news/detail-593568.html

/// <summary>
    /// 实现接口的OnEndDrag方法,处理结束时的方法
    /// </summary>
    /// <param name="eventData"></param>
    public void OnEndDrag(PointerEventData eventData )
    {
        //获取鼠标下的物体
        GameObject go = eventData.pointerCurrentRaycast.gameObject;
        //交换物品
        if (go.tag.Equals(Enum_Tags.InventoryItemGird)) ExchangeOfGoods(go);
        //复原
        else
        {
            transform.SetParent(imageFather);
            transform.position = startPosition;
        }
        canvasGroup.blocksRaycasts = true;//ui事件穿透:置为不能穿透

    }
/// <summary>
    /// 将一个物体放在另一个物体下
    /// </summary>
    /// <param name="child">作为子物体</param>
    /// <param name="parent">作为父物体</param>
    private void SetParentAndPosition(Transform child, Transform parent)
    {
        child.SetParent(parent);
        child.position = parent.position;
    }
   /// <summary>
    /// 格子内的物品进行交换
    /// </summary>
    /// <param name="go">鼠标结束位置的格子</param>
    private void ExchangeOfGoods(GameObject go)
    {
        Transform[] childrens = go.GetComponentsInChildren<Transform>();
        bool isHaveChildren= childrens.Length > 1;
        if (isHaveChildren)
        {
            Transform child = go.transform.GetChild(0);
            SetParentAndPosition(child, imageFather);
          
        }
        SetParentAndPosition(gameObject.transform, go.transform);
        
    }
Vector3 screenPositionToWorldPositionBy_Z(Vector3 needToFixedScreenPosition, Vector3 baseWorldPosition)
    {
        Vector3 baseScreenPosition = Camera.main.WorldToScreenPoint(baseWorldPosition);
        needToFixedScreenPosition.z = baseScreenPosition.z;
        return Camera.main.ScreenToWorldPoint(needToFixedScreenPosition);
    } 

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

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

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

相关文章

  • Unity中鼠标控制3D物体进行拖拽

    拖拽 1 、获取3D物体在世界坐标的位置转换屏幕坐标 2、鼠标在屏幕的坐标与物体在屏幕的坐标Z轴进行拟合 3、获取3D物体与拟合出来的坐标的偏移量 4、通过向量投影得到移动坐标 5、上干货,附带手指控制,手指控制逻辑同鼠标一样 自由拖拽 自由拖拽同上不同的是 获取3D物

    2024年03月26日
    浏览(41)
  • Unity实现鼠标拖拽多物体(拖拽单物体的拓展)

    学习了B站UP主OneCredit【Unity快速教学】鼠标拖曳甩动物件BV1qK4y1d7iZ的教学视频后 拓展了一下功能,实现多个物体也可以拖拽,互不受影响 主要是做了一个检测,在鼠标上物体才能被拖拽 目录 bool Drag 拖拽物体的实现 解决摄像机视角的影响 绑定刚体,写好需要用到的变量 Dr

    2024年03月24日
    浏览(56)
  • Unity 游戏开发、01 基础篇 | 知识大全、简单功能脚本实现

    Unity默认窗口布局 Hierarchy 层级窗口 Scene 场景窗口,3D视图窗口 Game 游戏播放窗口 Inspector 检查器窗口,属性窗口 Project 项目窗口 Console 控制台窗口 恢复默认布局 Window | Layouts | Default 调大页面字体 Preference | UI Scaling 新项目默认创建了 SampleScene 场景 {摄像机,平行光} SampleScen

    2024年02月09日
    浏览(56)
  • Unity 游戏开发、01 基础知识大全、简单功能脚本实现

    Unity默认窗口布局 Hierarchy 层级窗口 Scene 场景窗口,3D视图窗口 Game 游戏播放窗口 Inspector 检查器窗口,属性窗口 Project 项目窗口 Console 控制台窗口 恢复默认布局 Window | Layouts | Default 调大页面字体 Preference | UI Scaling 新项目默认创建了 SampleScene 场景 {摄像机,平行光} SampleScen

    2024年02月09日
    浏览(59)
  • Unity之Photon PUN2开发多人游戏如何实现组队功能

    Photon Unity Networking 2 (PUN2) 是一款基于Photon Cloud的Unity多人游戏开发框架。它提供了一系列易于使用的API和工具,使开发者可以快速构建多人戏,并轻松处理多人游戏中的网络同步、房间管理、玩家匹配等问题。 我们在查看Pun2的Demo时,会发现Demo中自带了一个简易的PhotonTeam和

    2024年02月11日
    浏览(60)
  • 【Unity实现背包拖拽功能 】

    Unity实现背包拖拽功能 可以实现背包拖拽交换位置、合成 等一系列功能的实现

    2024年02月12日
    浏览(54)
  • Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C#

    Unity无边框设置、窗口化放大、缩小、拖拽 提示:PC端打包,测试尽量在打包后测试。 编辑器下测试会有意想不到的后果呦~~ [DllImport(\\\"user32.dll\\\")] 。 代码如下: 代码如下:注释详细,不懂就问哈 代码整体已贴出,功能亲测可用,欢迎学习交流。点赞+收藏+关注哦~

    2024年02月16日
    浏览(49)
  • Unity3D实现背包系统、物品的拖拽、拾取物品功能

    要在Unity中实现背包系统,你可以创建一个脚本来管理库存和物品。 首先,在Unity中创建一个名为“InventoryManager”的C#脚本。在这个脚本中,你可以创建一个将存储在背包中的物品列表。

    2024年02月16日
    浏览(44)
  • 【Unity】在UI上实现拖拽功能(IBeginDragHandler, IDragHandler,IEndDragHandler)

    IBeginDragHandler、IDragHandler 和 IEndDragHandler 是 Unity 引擎中的三个接口,用于处理 UI 元素的拖动事件。 IBeginDragHandler:开始拖动时调用 IDragHandler:正在拖动时调用 IEndDragHandler:拖动结束时调用 在脚本中加入如下三个方法 button:触发此事件的按钮 clickCount:计算按钮连击次数,间

    2024年04月22日
    浏览(31)
  • 在unity中实现视频的暂停播放和拖拽进度条的功能

    #Unity中实现视频的暂停播放和拖拽进度条的功能 在UI上,视频包含一个播放、暂停和停止按钮,以及一个拖动条,可以使用这些按钮来控制视频的播放,使用拖动进度条来调整视频的播放进度。 1.建立一个UI,导入视频素材,然后将视频拖放到场景中。 2.建立一个Canvas对象作

    2024年02月07日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包