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

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

实现的思路主要是:使用拖动手势时,父级面板跟随手势的移动而移动,监听开始拖动和拖动过程中手势的位置坐标,以此判断当前的拖动方向(向左、向右)。


需要实现面板跟随鼠标拖动的过程:

拖动过程中根据坐标位置的水平偏移来判断当前手指在屏幕上的滑动的距离是否超过了设定值,如果超过设定值,插值移动当前面板到目标位置,如果不满足条件,移动当前面板到初始的位置。(移动的过程,通过插值法Mathf.Lerp或者Vector3.Lerp来实现在Update函数中来实现,也可通过IEnumerator 结合While循环实现)


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


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

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值