仿U3D回调方式的通用3D物体拖拽基类

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;

public class Drag3DBase : MonoBehaviour,IDragHandler,IBeginDragHandler,IEndDragHandler {


    bool drag = false;
    float distance;
    Vector3 originPointPos;
    Vector3 originObjPos;

    public void OnBeginDrag(PointerEventData eventData)
    {
        if (eventData.rawPointerPress.transform == this.transform)
        {
            drag = true;
            distance = eventData.pointerPressRaycast.distance;
            originPointPos = GetWorldPos(eventData.position, distance);
            originObjPos = this.gameObject.transform.position;
            OnBeginDragHandle(eventData);
        }
    }
    public void OnDrag(PointerEventData eventData)
    {
        if (!drag)
            return;

        Vector3 tempPos = GetWorldPos(eventData.position, distance);
        Vector3 deltaPos = tempPos - originPointPos;
        this.transform.position = (originObjPos + deltaPos);
        OnDragHandle(eventData);

    }
    public void OnEndDrag(PointerEventData eventData)
    {
        if (!drag)
            return;

        drag = false;
        OnEndDragHandle(eventData);
    }
    protected Vector3 GetWorldPos(Vector2 mousePos, float distance)
    {
        Ray ray = Camera.main.ScreenPointToRay(mousePos);
        return ray.GetPoint(distance);
    }

    protected virtual void OnBeginDragHandle(PointerEventData eventData)
    {

    }
    protected virtual void OnDragHandle(PointerEventData eventData)
    {

    }
    protected virtual void OnEndDragHandle(PointerEventData eventData)
    {

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你把你过来见我时的草帽留着 和画纸一起塞进包裹 你说你见我时有藏不住胆怯和羞涩 可眼里有长长的银河 你说你路上遇见...
    酒肉穿肠做朽翁阅读 724评论 0 0
  • 他低估了梦想 只爱反复抽着同一支烟 固执的把明天当做今天 可有可无的今天 无聊的做着欢愉的游戏 去把一个个小石子扳...
    纵浪阅读 261评论 0 1
  • 我喝酒的历史并不算长,由于打小成长环境单纯再加上后期工作环境也单纯,这一切铸就了我拥有眼里揉不进沙子习惯24小时正...
    银子姐阅读 336评论 3 3