返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1559|回复: 0

[原创] 【原创】Unity3D 如何拖拽UI面板中的菜单栏

[复制链接]
发表于 2025-2-12 22:51:58 | 显示全部楼层 |阅读模式
Unity3D 如何拖拽UI面板中的菜单栏
核心关键词:PointerEventData


前言:如图有一个UI面板,想实现的效果:点击菜单栏拖拽,UI面板跟着鼠标移动。




1.首先需要理清UI资源的摆放层级,这里我选择了以菜单栏为父物体,下面的UI面板为子物体,这样,当父物体移动时,子物体UI面板则会跟着移动



2.编写菜单栏移动脚本(注意需要继承IBeginDragHandler, IDragHandler, IEndDragHandler接口,同时下面的OnBeginDrag、OnDrag、OnEndDrag一个都不能少,否则会报错且拖拽失效

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

public class GameWindows : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    //窗口位置
    public RectTransform GameWindowsRTF;

    private bool IspointerEnter;


    void Start()
    {
        //窗口初始位置
        GameWindowsRTF.anchoredPosition = new Vector2(0, 0);
    }


    public void OnBeginDrag(PointerEventData eventData)
    {
        //只有当拖拽时鼠标检测到UI面板栏时,才能开始拖拽,如果不添加此处判定,则父物体下面包含的子物体也会触发拖拽效果!
        if (eventData.pointerEnter.name == "GameMapTitle")
        {
            IspointerEnter = true;
        }
    }

    //拖拽开始
    public void OnDrag(PointerEventData eventData)
    {
        if (IspointerEnter == true)
        {
            transform.position = eventData.position;
        }
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        IspointerEnter = false;
    }

}


3.将脚本挂载到菜单栏中,运行即可拖拽看到效果。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表