Particle System体会

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:

减少粒子数,或者干脆不要用粒子效果。(也就是还没想出来)


坑5: Collision - mesh collider

我只知道maya中导出的mesh可以只有单面可见,通过设置polygon normal来实现,如normal指向外面就在外部可见。然而,mesh collider也随了mesh的这个特点,如果normal是单面的,collider也只在那一侧有碰撞检测。

解决方法5:

在Maya中重新调整normal方向并导出。


坑6: Particle有规律的出现消失,而非持续发射

解决方法6:

配合调整参数Duration, MaxParticles, EmissionRate,一旦Duration > MaxParticles / Emission Rate就会出现这种情况。


另外,记录一条RGB转Grayscale的公式:

x = R*0.3 + G*0.59 + B*0.11


罗列了一些坑,以儆效尤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值