Unity物体拖拽系统(二)

         我们现在讲一下OnDragItem的使用,这个类的使用很简单,你只需要在需要拖拽的物体上添加这个脚本,并且在使用拖拽的位置对Item进行回调配置就行,我们看一下OnDragItem中定义的几个函数。

     

Config这个函数是给当前物体赋值拖拽回调的,有一些通用的方法需要补充进函数里,比如当拖拽开始时,需要将当前拖拽物体设置为自己,在拖拽结束时,需要将拖拽物体置空,是否置空拖拽类型需要根据项目的需求而定。

 在OnBeginDrag函数中,我们首先判断了是否是左键拖拽,并且是否已经配置过当前类的回调。如果条件满足,我们要判断是否当前正在拖拽或者拖拽被锁定,如果上述两个情况满足,我们就不能启动这个函数,如果不满足,那么我们应该将isDraging这个参数变为true,并且记录下现在拖拽图片的位置,并且执行我们设置的开始拖拽回调。

OnDrag这个函数会在拖拽过程中触发,我们还是要像之前一样判断,但是如果我们判断不再拖拽中,就不能执行OnDrag函数,也就是说我们只有执行了OnBeginDrag函数,OnDrag函数才会被启用。在这个函数中,我们首先要做的就是将拖拽图片的位置,一直跟随我们的鼠标位置,鼠标位置转换为屏幕位置,将鼠标位置转换为屏幕坐标我们使用了下面的函数,第二步获取MousePostion的函数也就是返回了Input.MousePosition,这个函数未来会讲解,想了解的朋友可以先看一下我写的屏幕坐标和世界坐标转换的文章

Unity世界坐标转换屏幕坐标(概览)_Unity鼓励师的博客-CSDN博客_unity世界坐标转屏幕坐标

    public static Vector2 GetUIPos(GameObject go)
    {
        Vector2 uiSize = go.GetComponent<RectTransform>().sizeDelta;//得到画布的尺寸
        Vector2 screenPos = GetMousePosition();
        Vector2 screenPos2;
        screenPos2.x = screenPos.x - (Screen.width / 2);//转换为以屏幕中心为原点的屏幕坐标
        screenPos2.y = screenPos.y - (Screen.height / 2);
        Vector2 uiPos;//UI坐标
        uiPos.x = screenPos2.x * (uiSize.x / Screen.width);//转换后的屏幕坐标*画布与屏幕宽高比
        uiPos.y = screenPos2.y * (uiSize.y / Screen.height);
        return uiPos;
    }

 结束拖动时,我们同样要进行OnDrag函数中的判断,但是最后我们还会把拖拽的图片变为隐藏状态,并且把他的位置放回原来的位置,并且将isDraging参数设置为false,下一篇文章我会讲解一下具体的使用和注意事项

相关链接

扫描二维码关注公众号,回复: 14650142 查看本文章

Unity物体拖拽系统(一)_Unity鼓励师的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/HelloCSDN666/article/details/125626205
今日推荐