UGUI拖拽和范圍限制
實作效果如下
說明:
- 腳本掛Image上的,Iamge是視窗紅色標題欄
- Drag3是一個視窗因為測驗忘了改名字
- 這個拖拽腳本對于三種Canvas渲染模式均有效

這張圖演示Canvas的世界物體模式,注意看Scene面板

實作代碼如下
using UnityEngine;
using UnityEngine.EventSystems;
public class Drag3 : MonoBehaviour, IBeginDragHandler, IDragHandler
{
public RectTransform dragTarget;//被拖拽的物體
public RectTransform dragRangeRect;//拖拽限制范圍Rect
Vector2 offset;//偏移量
//開始拖拽
public void OnBeginDrag(PointerEventData eventData)
{
Vector2 localPoint;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(dragRangeRect, eventData.position, eventData.pressEventCamera, out localPoint))
{
offset = (Vector2)dragTarget.localPosition - localPoint;//算出開始拖拽時候滑鼠點和 dragTarget的偏移量
}
}
//拖拽中
public void OnDrag(PointerEventData eventData)
{
//把滑鼠點映射到dragRangeRect的區域坐標點
Vector2 localPoint;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(dragRangeRect, eventData.position, eventData.pressEventCamera, out localPoint))
{
dragTarget.localPosition = localPoint + offset;
}
//不懂RectTransform.rect.min和max的同學可以運行看下列印
// print(dragTarget.rect.min.ToString("0")+" "+dragTarget.rect.max.ToString("0"));
//限制范圍
Vector2 min = dragRangeRect.rect.min - dragTarget.rect.min;
Vector2 max = dragRangeRect.rect.max - dragTarget.rect.max;
Vector3 pos = dragTarget.localPosition;
pos.x = Mathf.Clamp(pos.x, min.x, max.x);
pos.y = Mathf.Clamp(pos.y, min.y, max.y);
dragTarget.localPosition = pos;
}
}
限制范圍的原理

謝謝瀏覽!,如果您覺得本文不錯記得關注并分享
歡迎對游戲開發感興趣的同學,掃描二維碼加我微信,一起研究學習

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/147059.html
標籤:其他
上一篇:js禁止打開控制臺
下一篇:9.29華為主管面
