Unity—获取到手指点击的UI

本文详细介绍了在Unity中使用Canvas管理Panel的点击事件的方法。通过更新函数检查触摸输入,利用PointerEventData和RaycastResult实现对UI元素的碰撞检测,从而处理如摇杆和技能按钮等特定UI组件的点击事件。

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

Canvas管理Panel的点击事件

   private void Update()
        {    
            if(Input.touchCount > 0)
            {
                TouchDeal(Input.mousePosition);
            }
        }
    
        //手指点击之间

处理
    void PointrEvent()
    {
        foreach (Touch touch in Input.touches)
        {
            TouchDeal(touch.position);
        }
    }

    //碰撞到的UI判断
    void TouchDeal(Vector2 touchPosition)
    {
        PointerEventData pointer = new PointerEventData(EventSystem.current);
        pointer.position = new Vector2(touchPosition.x, touchPosition.y);

        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(pointer, results);
        foreach (RaycastResult result in results)
        {
            if (JoyStick_Panel == result.gameObject)
            {
                //处理摇杆
            }
            else if(SkillButton_Panel)
            {
                //处理技能
            }
            else
            {

            }
        }
    }
### 实现 UnityUI 元素的拖动功能 为了使 UnityUI 元素能够响应用户的拖拽操作,需确保这些元素实现了特定接口并处理相应的事件。具体来说,在 UGUI (Unity GUI) 系统中,要实现拖拽功能,应继承 `IBeginDragHandler`、`IDragHandler` 和 `IEndDragHandler` 接口,并相应地重写它们的方法。 #### 继承必要的接口 当一个类实现了以上提到的三个接口时,意味着它会监听三种不同阶段的输入事件:开始拖拽 (`OnBeginDrag`)、正在进行中的拖拽(`OnDrag`)以及结束拖拽(`OnEndDrag`)。即便某些情况下不需要特别处理某个阶段的行为,仍然需要提供空方法来满足编译器的要求[^2]。 #### 编写脚本逻辑 下面是一个简单的 C# 脚本例子,展示了如何通过编写自定义组件来支持基本的拖拽行为: ```csharp using UnityEngine; using UnityEngine.EventSystems; public class UIDraggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { private RectTransform rectTransform; void Start(){ rectTransform = GetComponent<RectTransform>(); } public void OnBeginDrag(PointerEventData eventData){ // 开始拖拽时的操作 } public void OnDrag(PointerEventData eventData){ // 更新位置跟随鼠标移动 rectTransform.anchoredPosition += eventData.delta; } public void OnEndDrag(PointerEventData eventData){ // 结束拖拽后的清理工作或其他动作 } } ``` 此代码片段创建了一个名为 `UIDraggable` 的新 MonoBehavior 类型,其作用是在用户点击并拖动关联的游戏对象时改变它的位置。这里的关键在于获取目标物体的 `RectTransform` 并利用 `eventData.delta` 来调整锚定的位置属性,从而达到平滑跟踪手指或鼠标的运动效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值