obsidian/笔记文件/2.笔记/UGUI整体解决方案-案例篇_第七章.md
2025-03-26 00:02:56 +08:00

4.5 KiB
Raw Permalink Blame History

特效和UI之间也可以通过layer层级控制前后遮罩效果 有两个Canvas画布第一个的layer是0

!Pasted image 20240327130737.png

第二个的是10

!Pasted image 20240327130803.png

这个是包含Particle System 粒子系统的特效预制体展开Renderer渲染器设置layer是5介于俩画布之间

!Pasted image 20240327130834.png

运行游戏,可以看到,遮罩也是正常的,根据层级来

!Pasted image 20240327130948.png

特效还可以被Mask遮罩例如这个Mask包含一个small特效

!Pasted image 20240327131034.png

特效渲染器的masking选项如果选择了inside就会在mask内部显示

!Pasted image 20240327131133.png

outside就是反着来了显示在外部

!Pasted image 20240327131217.png

运行游戏,点击,会出现照片墙的波纹特效

!Pasted image 20240327131316.png

这是最外层管理照片墙的逻辑类其中声明的Prefab变量是用来批量初始化的预制体 单一照片都会挂载PhotoWallItem这个脚本这里弄一个队列容器items统一管理 centerIds这个队列容器是用来存储点击照片的中心点集合 offset就是照片之间间距偏移数值 Start初始化函数中先实例化各个数据队列容器还会在当前实体上新增挂载一个Reenter组件是用来处理照片墙整体的初始化移动相关逻辑 最后调用的SpawnItems函数是用来批量创建各个照片实体的逻辑

!Pasted image 20240327142249.png

对应挂载在画布Canvas上

!Pasted image 20240327142355.png

单个照片实体,都会挂载的,对应逻辑脚本文件; 有唯一标识ID中心点布尔判断设定缩放showScale是否为左右边界Border的布尔判断当前照片实体邻居合集记录的是唯一ID数据容器NeighborIds 还会声明FadeEffect特效逻辑类是用来处理邻近周边照片墙点的透明化也是用了Dotween插件的DoFade透明动画插件后续会解析 CircleXMin和CircleXMax两个字典都是用来配合照片墙整体移动的数据容器 Radius是设定的半径主要用来配合透明特效的显示范围 TargetPos就是照片实体的目标位置信息用于配合移动即可 声明的FluctuateEffect变量是用来处理周边照片点的缩放处理特效后续会解析

!Pasted image 20240327143130.png

透明特效,对应逻辑; 也是声明了唯一标识id半径对应的单个照片实体影响半径radius获取图片组件用来设置Image组件的raycastTarget射线检测是否开启 Func委托是用来从总的照片墙队列容器通过index索引拿到特定的PhotoWallItem照片实体 还有画布组CanvasGroup组件等 Init初始化函数就是对各个声明变量进行赋值初始化即可

!Pasted image 20240327153110.png

可以看到对应的Image子物体是有包含CanvasGroup组件的

!Pasted image 20240327153810.png

播放透明特效的逻辑在Play函数中 一连串布尔判断之后对包含中心ID centerId的照片实体通过GetDistance在影响半径距离内的实体通过Dotween动画插件的接口如果目标阿尔法数值为0也就是最终要变成透明的话就取消该实体的点击射线检测raycastTarget同时CanMove设置为false不能移动 反之,就是上述逻辑相反即可;

!Pasted image 20240327154208.png

!Pasted image 20240327153923.png

函数内透明化处理的核心逻辑在0.2秒内完成DOFade操作然后调用协程WaitFade等待0.15秒后调用临近照片点的透明特效播放Play函数逻辑即可

!Pasted image 20240327154806.png

!Pasted image 20240327154941.png

控制缩放特效的相关逻辑声明的变量和透明特效的基本类似有一个不一样是_defaultScale默认缩放参数值 Init中完成各个变量的初始化赋值即可其中默认缩放设置是组件的localScale自身缩放即可

!Pasted image 20240327155030.png

表现上,缩放特效,是以中心点为中心,向周边所有节点,扩展的,所以是没有,透明特效那种,作用半径范围; 也是Play函数触发特效的缩放动画播放在一系列布尔判断处理之后通过DOScale函数完成缩放特效然后调用WaitFade协程播放桌边的缩放特效即可

!Pasted image 20240327155354.png

!Pasted image 20240327155631.png