有时候需要在播放粒子特效前就清楚的知道粒子特效将播放多久。查了一下Unity的API发现ParticleSystem的duaration属性真的好坑爹,因为不准。。。 不信你可以试试。
下面说计算特效时长的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
static float ParticleSystemLength(Transform transform) { ParticleSystem []particleSystems = transform.GetComponentsInChildren<ParticleSystem>(); float maxDuration = 0; foreach(ParticleSystem ps in particleSystems){ if(ps.enableEmission){ if(ps.loop){ return -1f; } float dunration = 0f; if(ps.emissionRate <=0){ dunration = ps.startDelay + ps.startLifetime; }else{ dunration = ps.startDelay + Mathf.Max(ps.duration,ps.startLifetime); } if (dunration > maxDuration) { maxDuration = dunration; } } } return maxDuration; } |
OK 这就算出来。 欢迎大家在下面留言,一起讨论开发技巧~嘿嘿。
- 本文固定链接: https://www.xuanyusong.com/archives/3512
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!
一个 粒子系统,如何 获取其中的renderer 模块呢 我想获取renderer 之后改变粒子的颜色…. 我用 ParticleSystemRenderer 好像获取不到 直接用renderer 好像也获取不到… 网上也没有查到…
好用好用。。有时我在用Unity 编辑器中调试粒子效果的时候,在编辑状态下有时候粒子能出来 有时候却出不来,这个一般是啥原因呢
dunration = ps.startDelay Mathf.Max(ps.duration,ps.startLifetime);这种计算粒子的时间不准啊,因为当发射多个粒子时,最后一个粒子可能就是在duration秒时发出,那么此时的播放总时间为duration ps.startLifetime啊,怎么样才能做到准备确定播放时间长度啊???
dunration = ps.startDelay + Mathf.Max(ps.duration,ps.startLifetime);这种计算粒子的时间不准啊,因为当发射多个粒子时,最后一个粒子可能就是在duration秒时发出,那么此时的播放总时间为duration+ps.startLifetime啊,怎么样才能做到准备确定播放时间长度啊???
我也遇到这种情况了,问一下,解决了么
不错,能获取时候,在一些情况下还是挺有用的。能顺便解答一下怎么加速特效吗?来一个什么1倍速度 2倍速播放的?这个有办法吗
duaration需要减0.1,因为这货最小值就是0.1。。
除了不准之外,我还发现一个更为坑爹的事情,我们特效的同学做了一个特效,使用了很多个ParticleSystem,就是有一堆的例子发射器,按理只需要在场景中Instantiate之后这些特效就都会自动播放的,但是实际测试中,会发现只有部分例子特效会自动播放,其他的货就跟没有一样。最终还是得将所有Children节点的ParticleSystem手动Play一下才行。
这个我也遇到了。。 和你的做法一样。。
握爪
昨天跟朋友一起吃饭刚好聊到这个问题了,他提出他们的做法是首先确保所有的粒子特效都挂在一个ParticleSystem根节点之下,然后只播放这个根节点ParticleSystem,刚刚测试了一下,貌似是可以的。不过这个从理论上跟自己调用每一个ParticleSystem应该没有啥区别。
Unity3D的文档中对于这个Play的文档中确实有关于是否同时播放子节点动画的参数,public void Play(bool withChildren = true),只是默认值就是true。哈哈,还是木有仔细阅读文档啊。
问一下,UGUI本身提供支持类似NGUI的PropertyBinding的双向数据绑定,用以实现界面与后台数据的功能了吗?
得自己写了。 应该没有提供。。
刚试了一下,NGUI的PropertyBinding可以用在UGUI上。仍然可以做界面逻辑与后台数据的解耦合。
好奇的问问计算来干嘛……顺便提提小心有些特效当看不到的时候会暂停的
有需求需要提前要知道时间。。
我们这边暂时都是读配置表的,特效时间压根就没用 有些需要自己销毁的,也添加了组件,每帧检查是否播完之类的
技能特效可以配在表里。。 比如一些UI特效。 希望UI特效播放完以后干个啥事。。。update里面写代码很丑,我喜欢事件回调。。