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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一个专业的游戏引擎,可以通过它实现各种游戏和应用程序,例如滚动列表滚动列表是一种常见的UI元素,在游戏和应用程序广泛使用,例如日历、地址簿和设置菜单。在Unity实现滚动列表需要以下步骤: 1. 创建UI元素 - 首先,在Unity创建一个UI元素,例如面板或Scroll View。可以使用Unity的UI系统来创建这些元素,例如Canvas、Panel、Viewport和Scrollbar。 2. 添加UI元素 - 接下来,向UI元素添加所需的组件。对于滚动列表,可以向UI元素添加ScrollView组件。ScrollView组件允许从列表滚动项目,并向其添加加速度和摩擦力等属性。 3. 填充列表 - 然后,将滚动列表填充为所需的内容。这可以通过以编程方式添加项目、从资源插件加载项目或从数据存储动态加载项目来完成。 4. 设置列表选项 - 配置滚动列表选项,例如每个项目的大小、位置或颜色等。这些选项可以通过ScrollView和它的子组件来实现。 5. 处理交互 - 最后,处理滚动列表的用户交互事件。例如,当用户单击某个项目时,应该触发适当的操作,例如打开详细视图或编辑该项目。 综上所述,Unity提供了一个灵活的UI系统,可以用于实现各种UI元素,包括滚动列表。通过使用Unity的UI组件和脚本,开发人员可以轻松地创建复杂的用户接口,并提供与用户的互动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值