Unity 不使用ScrollView实现有限物体的无限循环
话不多说,先献上效果图:
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 < Mathf.Ceil(campCount / 2)){moveIndex = -val;}else{moveIndex = campCount - val;}ChangeList(moveIndex);return;}}}
也支持自己设置循环item的数量
//设置Item数量
//@param number 数量
public void SetCampCount(int number){campCount = number;int halfNum = number / 2;//for (int i = 1; i <= halfNum - 1; i++){scaleList.Add(1 - 0.3f * i);}if (!IsOuNumber(number)){scaleList.Add(1 - 0.3f * (scaleList.Count - 1));}int _num = halfNum;for (int i = 1; i <= halfNum; i++){scaleList.Add(1 - 0.3f * _num);_num--;}for (int i = 1; i <= number; i++){btnList.Add(parent.transform.Find("Image" + i).transform);prevBtnPos.Add(btnList[i - 1].position);}}
资源是付费资源,不够一杯奶茶钱。学生可加我QQ,免费送你学习!
项目资源地址:https://download.csdn.net/download/lq1340817945/77115834
Unity 不使用ScrollView实现有限物体的无限循环相关推荐
- unity实现图片轮播效果_unity 背景无限循环滚动效果
背景无限循环滚动效果如下示: 步骤如下: 导入背景图片后,设置图片的格式,如下图: 2.图片格式也可以设置是Texture格式,但是Wrap Mode 一定要是Repeat[重复发生]:然后记得App ...
- Unity 横向滚动ScrollView
Unity 横向滚动ScrollView 用AnimationCurve做省事很多(/.\) 先上效果图 插件设置 左右都为pingpang using System.Collections; usi ...
- Unity中利用材质自发光实现物体闪烁效果
Unity中利用材质自发光实现物体闪烁效果 补充:这种方法有一点问题,在测试(Windows平台)的时候发现,要想在Build出来的游戏中实现闪烁效果,就必须在 Project 窗口中将源材质的自发光 ...
- 小功能⭐️Unity中利用材质自发光实现物体闪烁效果
文章目录 本文基于VDer的文章<Unity中利用材质自发光实现物体闪烁效果>延伸开发 在实现了具有一个Material的物体闪烁发光之后,延伸开发了具有多个Material的自闪烁效果, ...
- 【unity HoloLens2】触碰了物体但没反应,触碰了一次却调用多次,HoloLens2的touch触发机制探究
[unity HoloLens2]触碰了物体但没反应,触碰了一次却调用多次,HoloLens2的touch触发机制探究 开发项目时发现,有时候触碰了物体却没有触发touch事件,有时候触碰了一次物体, ...
- Unity的ScrollView无限循环滚动
前言 此篇文章当作知识学习即可,需要使用循环复用的小伙伴可以尝试博主近期开发的ScrollCircleMaker v1.0,此插件功能比较完整,使用方便,如果遇到问题可以联系我进行修改. 当Scrol ...
- 世界是有限的还是无限的?
茶余饭后与朋友交谈突然谈到这个问题,世界这里就代表我们所说的宇宙.宇宙到底是有限的还是无限的.如果用严格的数学思维来证明无非就是两种情况,用假设验证法证明.假设宇宙是有限的,那么我们肯定能找到一个边界 ...
- unity3d循环滑动_Unity3D中如何用代码实现物体的左右循环移动?
展开全部 Unity3D中用代码实现物体的左右循环移动的方式如下: 1.新建一32313133353236313431303231363533e59b9ee7ad9431333365646264个Cu ...
- 【Unity入门】场景、游戏物体和组件的概念
版权声明:本文为博主原创文章,转载请注明出处. 游戏和电影一样,是通过每一个镜头的串联来实现的,而这样的镜头我们称之为"场景".一个游戏一般包含一个到多个场景,这些场景里面实现了不 ...
最新文章
- python diango 并发_利用gunicorn提高django的并发能力
- Microsoft Edge Chrome 下载
- GoldenGate系统二:快速搭建三方单向通信GoldenGate环境
- python 温度插值nan处理_Python处理inf和Nan值,pytorch,nan,数值
- C++学习笔记-利用rapidJSON生成JSON数据
- 设计模式8(享元模式,解释器模式)
- java实验报告13答案_(完整版)Java程序设计实验报告
- 大企业中,Java面试官最爱问的问题集锦(2)
- Java面试题-多线程
- 80% 的公司在招聘时都忽略的一个细节
- 织梦DEDE一键搬迁网站模板数据到DSCMS教程
- bzoj·入门OJ·统计损失
- mapbox gl文字标注算法基本介绍
- 计算机网络课程设计家庭网,家庭无线局域网的组建
- python 自动输入_鼠标自动点击、键盘自动输入?几行Python代码搞定
- ubuntu安装拼音
- “绿多多”绿色资产资讯:良设板+“空间优造”亮相雄安 绿色生态进击!
- 8 精通matlab入门求微分方程组的通解特解数值解看这篇文章就够了
- 怎么调出全局搜索_eclipse全局搜索快捷键是什么
- 免费计算机应用毕业论文,计算机应用毕业论文 5000字