热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Unity不使用ScrollView实现有限物体的无限循环

话不多说,先献上效果图:6个物体无限循环:3个物体无限循环:实现的原理:其实从上面的3个循环的动画可以看出

话不多说,先献上效果图:
6个物体无限循环:
在这里插入图片描述

3个物体无限循环:
在这里插入图片描述

实现的原理:
其实从上面的3个循环的动画可以看出实现原理了。
在这里插入图片描述

1.首先创建对应的item循环节点,放在一个父物体下面统一管理。
2.父物体添加EventTrigger组件,用于取代scroll view监听拖拽事件。
3.在脚本里面通过遍历所有item,使用dotween对item进行位移,同时重新设置子item的层级
核心脚本

//改变位置 层级private void __changePos(int moveIndex){for (int i = 1; i <= btnList.Count; i++){var sequence = DOTween.Sequence();if (moveIndex > 0){int v = moveIndex - 1;//除去自身float moveTime = aniTime / moveIndex;//计算动画时间for (int k = v; k >= 0; k--)//遍历所有步骤{int temp = i - k;if (temp <1){temp += btnList.Count;}sequence.Append(btnList[i - 1].DOMove(prevBtnPos[temp - 1], moveTime).SetEase(Ease.Linear));sequence.Join(btnList[i - 1].DOScale(new Vector3(scaleList[temp - 1], scaleList[temp - 1], scaleList[temp - 1]), moveTime).SetEase(Ease.Linear));}}else{int v = Mathf.Abs(moveIndex) - 1;float moveTime = aniTime / Mathf.Abs(moveIndex);//计算动画时间for (int k = v; k >= 0; k--)//遍历所有步骤{int temp = i + k;if (temp > btnList.Count){temp -= btnList.Count;}sequence.Append(btnList[i - 1].DOMove(prevBtnPos[temp - 1], moveTime).SetEase(Ease.Linear));Debug.Log("移:" + temp);Debug.Log("移:" + scaleList[temp - 1]);sequence.Join(btnList[i - 1].DOScale(new Vector3(scaleList[temp - 1], scaleList[temp - 1], scaleList[temp - 1]), moveTime).SetEase(Ease.Linear));}}btnList[i - 1].transform.SetAsFirstSibling();//层级sequence.AppendCallback(() => {if (isClick){ }isClick = false;});}parent.transform.GetChild(0).SetSiblingIndex(campCount - 2);//左1}

也可以通过点击item进行跳转

//直接点击item进行跳转private void ClickCamp(Transform btn){int moveIndex = 0;for (int i = 1; i <= btnList.Count; i++){if (btnList[i - 1] == btn){int val = i - 1;if (val

推荐阅读
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 从批量eml文件中提取附件的Python代码实现方法
    本文介绍了使用Python代码从批量eml文件中提取附件的实现方法,包括获取eml附件信息、递归文件夹下所有文件、创建目的文件夹等步骤。通过该方法可以方便地提取eml文件中的附件,并保存到指定的文件夹中。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
  • 我正在尝试使用scrapycrallsingle运行完美运行的scrapy蜘蛛,但我无法在python脚本中运行它.主要问题是从不执行SingleBlogSpider.parse方 ... [详细]
author-avatar
梦亦碎i
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有