上一章UI拖拽传送门: https://blog.csdn.net/weixin_39328209/article/details/105969199
我们先看实现的效果吧:
通过效果图应该可以看到,它们现在被限制出屏幕了。当屏幕大小发生变化时,它依旧可以完美工作。
怎么样,很 cool 吧! 让我们一起探究一下如何制作吧!
制作流程:
- 拖拽面板锚点设置
- 修改代码
- 测试
拖拽面板锚点设置
设置锚点,让面板在 (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();
}
}
测试
非常感谢各位能看我的作品,如果喜欢我的作品,请记得点赞哦!!!