您的位置:首页 > 移动开发 > Unity3D

Unity中拖动的简单实现(UGUI以及3D物体)

2016-12-02 15:46 686 查看
拖动的基本代码如下

[RequireComponent(typeof( RectTransform))]
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class UGUIDrag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
private bool isDrag = false;
//偏移量
private Vector3 offset = Vector3.zero;

public void OnBeginDrag(PointerEventData eventData)
{
isDrag = false;
SetDragObjPostion(eventData);
}

public void OnDrag(PointerEventData eventData)
{
isDrag = true;
SetDragObjPostion(eventData);
}

public void OnEndDrag(PointerEventData eventData)
{
SetDragObjPostion(eventData);
}

void SetDragObjPostion(PointerEventData eventData)
{
RectTransform rect = this.GetComponent<RectTransform>();
Vector3 mouseWorldPosition;

//判断是否点到UI图片上的时候
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.pressEventCamera, out mouseWorldPosition))
{
if (isDrag)
{
rect.position = mouseWorldPosition + offset;
}
else
{
//计算偏移量
offset = rect.position - mouseWorldPosition;
}

//直接赋予position点到的时候回跳动
//rect.position = mouseWorldPosition;
}
}
}


UGUI中

只需要将上面的代码拖到想要移动的物体上即可

场景中需要一个EventSystem,一般创建UGUI的时候会自动生成

3D物体上

需要在摄像机上加入 Physics RayCaster 组件

另外物体上需要有Collider

场景中需要一个EventSystem

将上面脚本拖到需要拖动的物体对象上即可

扩展:其实我们可以继承许多的接口,参考上面的方法可以实现许多我么需要的效果。包括点击等等。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: