Unity实现UGUI拖拽及控制拖拽不出屏幕

/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称: DragUI
* 创建日期:2020-07-29 10:36:36
* 作者名称:静哥哥
* CLR 版本:4.0.30319.42000
* 修改记录:
* 描述:拖拽UI
******************************************************************************/
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Com.Rainier.WangJing
{
	public class DragUI : MonoBehaviour,IDragHandler,IBeginDragHandler
	{
        private Vector3 worldPos;
        private Vector3 offset;
        void Start()
        {
        }    
        public void OnDrag(PointerEventData eventData)
        {
            transform.position = offset + Input.mousePosition;
        }
        public void OnBeginDrag(PointerEventData eventData)
        {
            if (RectTransformUtility.ScreenPointToWorldPointInRectangle(transform.GetComponent<RectTransform>(), Input.mousePosition
             , eventData.enterEventCamera, out worldPos))
            {
                offset = transform.position - worldPos;
            }
        }
        void Update()
        {
            DragRangeLimit(transform);
        }
        /// <summary>
        /// 限制移动距离在屏幕内
        /// </summary>
        /// <param name="tra"></param>
        public void DragRangeLimit(Transform tra)
        {
            var pos = tra.GetComponent<RectTransform>();
            float x = Mathf.Clamp(pos.position.x, pos.rect.width * 0.5f, Screen.width - (pos.rect.width * 0.5f));
            float y = Mathf.Clamp(pos.position.y, pos.rect.height * 0.5f, Screen.height - (pos.rect.height * 0.5f));
            pos.position = new Vector2(x, y);
        }    
    }
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity的UGUIUnity Graphic User Interface)布局是通过RectTransform组件来实现的。RectTransform是一种特殊的Transform组件,它可以控制物体在屏幕上的位置、大小和旋转。 UGUI布局主要有以下几种方式: 1. 相对位置布局:使用锚点(Anchor)来设置物体相对于父级容器的位置。通过设置锚点的最小和最大值来确定物体的偏移位置,使用比例来自动适应不同屏幕分辨率。 2. 绝对位置布局:直接设置物体的位置坐标(position)来确定其在屏幕上的绝对位置。这种布局方式在需要精确控制物体位置时比较常用。 3. 自动布局:通过使用Layout组件(如Vertical Layout Group、Horizontal Layout Group)来实现物体的自动排列布局。Layout组件会根据子物体的尺寸和间距来自动调整其位置和大小,使它们适应容器的尺寸。 4. 网格布局:使用GridLayout Group来实现物体的网格布局,可以设置行数、列数、间距和边界等参数来控制物体的位置和排列方式。 在使用Unity控制UGUI布局时,可以通过代码或者编辑器来进行设置。在代码中,可以获取RectTransform组件并通过设置其属性来控制物体的位置、大小和旋转。在编辑器中,可以直接在Inspector面板上通过拖拽和调整参数来实现布局控制。 UGUI布局的设计原则是灵活性和可适应性,可以根据不同的需求和场景来选择合适的布局方式。同时,还可以结合动画效果和事件系统来实现更复杂的交互和界面效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值