千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  Unity技术干货  >  正文

Unity之ASE实现全屏风沙效果

来源:千锋教育
发布时间:2022-09-28 16:50:36
分享

  前言

  最近在做一个沙漠环境的2D游戏,里面需要加一个风沙的全屏特效,本来我们是用粒子特效实现的,但是后面发现,粒子数量有点多,性能消耗很大。而且由于是全屏风沙,当粒子特效面积过大,叠层过多时,引起的overdraw的增加,会使cpu压力更大。甚至最后导致我们游戏切换前后台时会卡死。

  所以,我们最后打算用shader来实现一个风沙效果,虽然不能完全模拟粒子的效果,但是基本还原90%的风沙效果。

  先看效果图:

Unity之ASE实现全屏风沙效果1

  实现原理

  1.风的实现 原理:使用一个流动的噪波图,实现对云雾图片的UV扰动。

  2.沙粒实现 原理:先让颗粒状或者条装的图片在风向上平移,然后使用一个噪波图的R通道对沙粒的平移结果进行踢出,最后在乘个叠加色。

  噪波干扰

  噪波图的流动原理如下图所示:

Unity之ASE实现全屏风沙效果2

  风的属性设置

Unity之ASE实现全屏风沙效果3

  沙的属性设置

Unity之ASE实现全屏风沙效果4

  用到的资源图片:

Unity之ASE实现全屏风沙效果5

Unity之ASE实现全屏风沙效果6

  

  完整节点和源码

  风:

Unity之ASE实现全屏风沙效果7

  源码:

Unity之ASE实现全屏风沙效果11

Unity之ASE实现全屏风沙效果12

Unity之ASE实现全屏风沙效果13

  沙粒:

Unity之ASE实现全屏风沙效果8

  源码:

Unity之ASE实现全屏风沙效果14

Unity之ASE实现全屏风沙效果15

Unity之ASE实现全屏风沙效果16

  希望这篇文章能对你有所帮助

  注:本文部分文字和图片来源于网络,如有侵权,请联系删除。版权归原作者所有!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

上一篇

相关推荐

  • fps低怎么办?什么原因导致的? 低帧率(FPS)通常是指在实时图像渲染或视频播放过程中,每秒显示的帧数较低,导致画面不流畅或卡顿。下面是一些可能导致低帧率的原因和相应的解决方法:1.硬件性能不足:如果计算机或设备的处理能力不够强大,
  • fps低了怎么调高 要提高FPS(FramesPerSecond,每秒帧数)的性能,可以尝试以下方法:1.优化图形设置:降低图形质量和特效,如分辨率、纹理质量、阴影等。这会减少图形渲染的工作量,提高性能。2.关闭后台进程
  • 反射的实现原理? Load(“程序集”)加载程序集,返回类型是一个Assembly,得到程序集中所有类的名称,foreach (Type type in assembly.Type type = assembly.创建此类型实例,MethodInfo mInfo = type.
  • unity如何接入puerts webpack适用于我们执行ts编译为js用的插件,把需要的依赖加入到dependencies标签中,然后在vscode的终端输入npm install 拉取依赖即可,拉取成功后,会生成一-个node_ modules的文件夹,里面就是我们拉取的依赖库,可能很大,这个文件夹最好加入到忽略列表中。代码如下所示:
  • xlua-framework之UI框架 我们前面说过xlua-framework这个框架,是一个纯lua的一个框架,也就是说我们所有的逻辑都可以在lua中实现,只有资源模块和网络模块是c#原生写的,但是也在lua中给我们包装的工具类,让我们更方便的使用。在框架的纯lua代码中,不得不说,ui框架是我最喜欢的,一套基于mvc的一套ui框架。
  • xlua-framework之网络框架 一般我们说到网络框架,主要是指Socket网络框架,如果是Http的话,我们没有必要单独介绍了,简单用可以直接使用WWW或者UnityWebRequest,如果稍微复杂的使用,可以使用RestSharp库。所以我们本章主要讨论的是xlua-framework框架是如何实现socket网络框架的。