|
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.将脚本挂载到菜单栏中,运行即可拖拽看到效果。
|