【Unity实现背包拖拽功能 】

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

Unity实现背包拖拽功能 可以实现背包拖拽交换位置、合成 等一系列功能的实现文章来源地址https://www.toymoban.com/news/detail-529913.html

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class DragCtrl : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler, ICanvasRaycastFilter
{
    public GradeItem item;
    private Transform nowparent;
    private bool isRaycastLocationValid = true;//默认射线不能穿透物体
    public Transform IconList;//存放拖拽物体的公共节点
    public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
    {
        return isRaycastLocationValid;
    }
    /// <summary>
    /// 开始拖动
    /// </summary>
    /// <param name="eventData"></param>
    public void OnBeginDrag(PointerEventData eventData)
    {
        OClickBtn();
        this.transform.SetAsLastSibling();//将被拖拽的物体设置为最后渲染
        nowparent = this.transform.parent;//保存最初始的位置
        isRaycastLocationValid = false;//设置射线穿透
        transform.SetParent(IconList);//将拖拽的物体放在公共父节点下
        //下面可以放拖拽时的功能
    }

    /// <summary>
    /// 拖动中
    /// </summary>
    /// <param name="eventData"></param>
    public void OnDrag(PointerEventData eventData)
    {
        Vector2 v2 = Vector2.zero;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(IconList.GetComponent<RectTransform>(), Input.mousePosition,StaffUIMgr.instance.mCamera, out v2);将拖拽时的屏幕坐标转换为公共节点下的局部坐标,不转换将看不见拖拽物体
        transform.localPosition = v2;
    }

    /// <summary>
    /// 拖动结束
    /// </summary>
    /// <param name="eventData"></param>
    /// <exception cref="System.NotImplementedException"></exception>
    public void OnEndDrag(PointerEventData eventData)
    {
        //transform.Find("Select").gameObject.SetActive(false);
        GameObject go = eventData.pointerCurrentRaycast.gameObject;
        if(go != null)
        {
            if (go.transform.parent.name == "iconItem")
            {
                //放拖动结束需要实现的功能
            }
            else
            {
            	//拖动失败  拖动物体复原
                transform.SetParent(nowparent);
                transform.position = nowparent.position;
            }
        }
        else
        {
        	//拖动失败  拖动物体复原
            transform.SetParent(nowparent);
            transform.position = nowparent.position;
        }
        isRaycastLocationValid = true;//射线不可以穿透物体
    }


   

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

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

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

相关文章

  • 【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

    📢博客主页:肩匣与橘 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 肩匣与橘 编写,首发于 CSDN 🙉 📢生活依旧是美好而又温柔的,你也是✨  基于Unity3D引擎的冒险游戏的设计与实现 📢前言 摘要 Abstract 1 绪论 1.1 选题背景 1.2 研究目的及意义 2 开发工具

    2024年02月05日
    浏览(66)
  • Unity 鼠标拖拽功能

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

    2024年02月16日
    浏览(37)
  • 【unity3D】退出游戏功能的实现

    💗 未来的游戏开发程序媛,现在的努力学习菜鸡 💦本专栏是我关于游戏开发的学习笔记 🈶本篇是unity的退出游戏功能的实现 新建一个button按钮,在Hierachy面板点击右键,然后UI—Button。 调节Button位置和Button下面Text文本的内容和大小。 新建一个脚本 新建一个空物体,然后

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

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

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

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

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

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

    2024年02月11日
    浏览(67)
  • unity存储信息的方式,保存读取背包、游戏进度,连接MySQL数据库

    为了在Unity中存储信息,有几种方法可供选择。最常见的方法是 PlayerPrefs、Serialization和Database 。 PlayerPrefs是一种简单的存储小量数据(如玩家偏好或游戏设置)的方法。它易于使用,不需要任何外部库。但是,不建议用于存储大量数据或敏感信息。 Serialization是另一种在Unit

    2024年02月09日
    浏览(63)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

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

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

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

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

    2024年04月22日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包