Unity UI 常用方法基本知识点

本文详细介绍了Unity中UI的高级应用技巧,包括鼠标检测、坐标转换、拖拽功能实现及Toggle单选设置等,帮助开发者提升游戏交互体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(持续更新)

一、如何检测鼠标进入UI,或者检测鼠标进入指定UI?

       在命名空间 using UnityEngine.EventSystems;当中,实现接口 IPointerEnterHandler  和  IPointerExitHandler,

       其中OnPointerEnter是鼠标进入UI后调用,OnPointerExit是鼠标离开UI后调用

       

using UnityEngine;
using UnityEngine.EventSystems;
public class GridUI : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler
{
    /// <summary>
    /// 鼠标进入调用
    /// </summary>
    public void OnPointerEnter(PointerEventData eventData)
    {
        if (eventData.pointerEnter.tag == "Grid")
        {
            Debug.Log("鼠标进入了" + transform.name);
        }
    }
    /// <summary>
    /// 鼠标离开调用
    /// </summary>
    public void OnPointerExit(PointerEventData eventData)
    {
        if (eventData.pointerEnter.tag == "Grid")
        {
            Debug.Log("鼠标离开了" + transform.name);
        }
    }
}

二、屏幕坐标转换为相对坐标的方法


Vector2 position;
//参数一是相对与谁的坐标,参数二是谁的坐标要转换,参数三是相机,参数四返回转换后的坐标
RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform, Input.mousePosition, null, out position);  

三、UI拖拽功能的实现

首先我们需要引入 UnityEngine.EventSystems; 命名空间,然后继承该命名空间下的几个接口并实现其中的方法

要继承的接口:IBeginDragHandler, IDragHandler, IEndDragHandler

然后实现其中的方法

  #region UI的拖拽
    public static Action<Transform> OnMyBeginDrag;
    public static Action<Transform,Transform> OnMyEndDrag;
    /// <summary>
    /// 当开始拖拽
    /// </summary>
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (eventData.button == PointerEventData.InputButton.Left)
        {
//eventData.pointerEnter当中保存的是我们的鼠标碰到的UI
            if (eventData.pointerEnter.transform.tag == "Grid" && eventData.pointerEnter.transform.childCount != 0)
            {
                OnMyBeginDrag?.Invoke(transform);
            }
        }
    }
    /// <summary>
    /// 拖拽过程中
    /// </summary>
    public void OnDrag(PointerEventData eventData)
    {
        if (eventData.button == PointerEventData.InputButton.Left)
        {

        }
    }
    /// <summary>
    /// 完成拖拽
    /// </summary>
    public void OnEndDrag(PointerEventData eventData)
    {
        if (eventData.button == PointerEventData.InputButton.Left)
        {
                OnMyEndDrag?.Invoke(transform,eventData.pointerEnter == null ? null : eventData.pointerEnter.transform);
        }
    }
    #endregion

当我们开始拖拽的时候通过委托将消息发送出去,让接收者实现拖拽的功能,这里分享一个屏幕坐标转换的方法

 
if (isDrag)
            {
                Vector2 position;
//我们鼠标的屏幕坐标转换为我们的某面板下的坐标,我是这么理解的,参数一传入面板或者Canvas的RectTransform,参数二是我们要转换的原始坐标,参数三是转换后我们得到的坐标
                RectTransformUtility.ScreenPointToLocalPointInRectangle(transform as RectTransform, Input.mousePosition, null, out position);
//拖拽逻辑
                dragItemUI.Show(position);
            }

三、一组Toggle组件如何设置单选模式

我们要把一组Toggle设置为单选模式,首先选中我们的游戏对象ToggleGroup,然后添加一个组件ToggleGroup的组件如图:

然后我们将所有的toggle组件选中,将ToggleGroup赋值给如图所示的位置,即可实现该组Toggle单选

四、文本框自适应大小,需要在Text组件下添加ContentSizeFitter组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值