Particle System
来源:互联网 发布:口红推荐知乎 编辑:程序博客网 时间:2024/05/14 07:32
Unity的Particle System真是让人又爱又恨,爱的是能做出很多想要的效果,恨的是一些参数未开放,无法在运行时动态调整,同时它的性能也是个问题。
先耐心地看这样一个案例。
需求:在一个不规则多边形区域内生成雾扩散的效果。
要求:雾扩散的范围和浓度需要和设定的值挂钩;雾的颜色可动态改变;雾不能扩散出多边形区域。
拿到这个需求单的时候,我第一个想到的做法是Particle System,因为雾、云、火焰等通常都是用particle实现的。但由于经验不足,没想到后边尽是坑啊~
坑1: Shape相关的参数不能在运行时调整
本来想通过改变shape中的radius等参数来实现emit area的缩放,然而,Unity竟然没有开放相关接口改变这些参数。
解决方法1:
通过不断和需求方协商(或者叫斗争or撕b),决定转换一下思路,用多边形区域的particle浓度来体现数值上的变化。当然,后来因为效果问题,由近一步做了调整,比如在一个区域内设置多个发散点,通过改变StartLifeTime来调整particle覆盖的区域。
坑2: Shape - Mesh发射粒子
通过编辑多边形形状的mesh,将其应用到particle的shape中,即使用Mesh的方式发射粒子。换句话说,就是在mesh上的点or三角面上生成粒子,这样做以后,就能看到一片乌黑的雾覆盖在了一个特定区域内。然而,要实现不同shape-mesh的发射方式,就得针对每个mesh做一个particle system object,而且要根据mesh的不同,搭配不同的参数。
解决方法2:
打算通过uv动画来做雾漂移的效果。(待验证)
坑3: Shape -Mesh粒子数
要和数值吻合,如果要高浓度覆盖一片较大的区域,就需要很多的粒子(MaxParticles 10000 per Particle System),在真机上一跑就卡的不行了!
解决方法3:
打算通过uv动画来取代mesh粒子。(待验证)
坑4: Collision
Unity Manual上也说了,如果要用collision,会很慢,be wise。但我很不明智地尝试使用collision来将粒子限制在一个区域内,性能是个坑。此外,要利用particle collision让粒子在碰到collider以后就消失,需要设置几个参数。1)World 2)Dampen设为1。3)Bounce设为0。4)LifeTimeLoss设为1.
解决方法4:
减少粒子数,或者干脆不要用粒子效果。(也就是还没想出来)
罗列了一些坑,以儆效尤。
- Particle system!
- Particle System
- Particle System
- (as3) flint-particle-system
- Particle System(粒子系统)
- Unity Particle System
- 粒子系统(Particle System)
- Particle System调整
- UE4 Particle System Reference
- Particle System体会
- Shuriken Particle System Properties
- Particle System Modules (Shuriken)
- unity3d particle system优化
- Unity3d用户手册Particle Systems Particle System Modules40
- 《Particle System Viewer》增强版
- ogre particle system script分析
- Particle system-3 Custom.m
- Particle system study section 1
- permutation的聪明算法
- LoadRunner组成及其工作原理简介
- 用Maven插件生成Mybatis代码
- android studio JNI环境配置
- 一个web项目web.xml的配置中<context-param>配置作用
- Particle System
- Java Web开发环境配置
- Kafka详解二、如何配置Kafka集群
- win8.1 摄像头切换
- 内部类---静态内部类和非静态内部类
- 自定义控件(22)---FloatView悬浮窗(1)
- 为shell命令设置超时
- 线程 (并发 互斥 同步 并行 多线程 异步)
- Linux 磁盘分区、格式化、挂载、查看操作