Unity 实现UI拖拽后限制UI出屏幕

上一章UI拖拽传送门: https://blog.csdn.net/weixin_39328209/article/details/105969199

我们先看实现的效果吧:

通过效果图应该可以看到,它们现在被限制出屏幕了。当屏幕大小发生变化时,它依旧可以完美工作。

怎么样,很 cool 吧! 让我们一起探究一下如何制作吧!

制作流程:

  1. 拖拽面板锚点设置
  2. 修改代码
  3. 测试

拖拽面板锚点设置

设置锚点,让面板在 (0,0) 点上, 这样方便计算拖拽面板与屏幕的位置。

 

修改代码

代码奉上:

using UnityEngine;
using UnityEngine.EventSystems;


public class ItemBox : MonoBehaviour, IDragHandler, IPointerDownHandler
{
    [SerializeField] private RectTransform dragTarget;
    [SerializeField] private Canvas canvas;

    private void Awake()
    {
        if (dragTarget == null) dragTarget = transform.GetComponent<RectTransform>();
        if (canvas == null) canvas = GameObject.Find("UICanvas").GetComponent<Canvas>();
    }

    
    // 核心在这里哦
    public void OnDrag(PointerEventData eventData)
    {
        Vector2 newPos = dragTarget.anchoredPosition + eventData.delta / canvas.scaleFactor;
        float x = Mathf.Clamp(newPos.x , 0, Screen.width / canvas.scaleFactor - dragTarget.sizeDelta.x);
        float y = Mathf.Clamp(newPos.y, 0, Screen.height / canvas.scaleFactor - dragTarget.sizeDelta.y);
        dragTarget.anchoredPosition = new Vector2(x, y);
    }

    public void OnPointerDown(PointerEventData eventData)
    {
        dragTarget.SetAsLastSibling();
    }
}

测试

非常感谢各位能看我的作品,如果喜欢我的作品,请记得点赞哦!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值