Unity中实现弹性滚动列表基于UGUI

弹性的滚动列表在原生的Android和IOS中很容易实现,基本上是官方封装好,直接继承按照自己的需求来更改即可。但是在游戏引擎中,如果需要实现这样的效果,官方一般不会提供这样的API,所以需要我们自己实现,刚好,之前项目里有这样一个需求,所以花了一点时间写了一个(基于官方的UGUI实现的),如果有兴趣可以到:https://bitbucket.org/Unity-Technologies/ui 这里下载官方源代码查看有关ScrlloView相关的内容。放张动图预览一下效果:

Unity中实现弹性滚动列表基于UGUI_第1张图片

实现的思路主要是:使用拖动手势时,父级面板跟随手势的移动而移动,监听开始拖动和拖动过程中手势的位置坐标,以此判断当前的拖动方向(向左、向右)。Unity中实现弹性滚动列表基于UGUI_第2张图片


需要实现面板跟随鼠标拖动的过程:
Unity中实现弹性滚动列表基于UGUI_第3张图片
拖动过程中根据坐标位置的水平偏移来判断当前手指在屏幕上的滑动的距离是否超过了设定值,如果超过设定值,插值移动当前面板到目标位置,如果不满足条件,移动当前面板到初始的位置。(移动的过程,通过插值法Mathf.Lerp或者Vector3.Lerp来实现在Update函数中来实现,也可通过IEnumerator 结合While循环实现)
Unity中实现弹性滚动列表基于UGUI_第4张图片

我使用的是DoTween插件来实现具体的弹性回滚的效果,因为每次弹性回滚都是移动到固定的坐标,尝试在Update中结合 Time.deltaTime和Ienumator结合While 循环语句来实现,但是效果不太好,所以借助插件实现回滚,具体的代码见下图。.
Unity中实现弹性滚动列表基于UGUI_第5张图片

最后需要对列表进行左右的边界限制,这个限制我们需要在LateUpdate函数中实现。具体代码如下图所示。

到此,基本实现思路就差不多了,代码写的很模块化,遇到具体项目需要使用时,大概按照项目需求修改一下就可以使用了。

总结:关于UI对象或者3D对象的拖动,在官方的UI资源包种有详细的案例,如果有需要的可以去Asset Store中下载,官方的代码写的很不错,通读一遍,大概修改一下就可以用到项目中。

最后还是附上github工程文件地址:https://mp.weixin.qq.com/s?__biz=MzIwOTM3MzI1OA==&mid=2247483696&idx=1&sn=0ac1830bd6fd67b32bdc0235e36e0f1e&chksm=97759015a00219039d6128d1a36c0cb558b78d05b88e2d4832498560da345d4d452dd07ea30c#rd


你可能感兴趣的:(Unity3D)