
Unity中的粒子系统使用起来还是比较方便的。不过在实际过程中遇到这样的一个问题:需要动态的来控制一个粒子系统组件所能产生的最大粒子数。看doc上说是有maxParticles来控制,但实际上却没有这个开放的参数,只能通过其它的方式来实现。
这里可以通过手动产生粒子的方式来实现,也即ParticleSystem中的Emit方法,具体代码如下:
[csharp] view plain copy
public class ParticleSystemComp : MonoBehaviour
{
ParticleSystem mParticleSystem = null;
int mMaxParticles = 0;
public int maxParticles
{
get
{
return mMaxParticles;
}
set
{
mMaxParticles = value;
}
}
void Awake()
{
mParticleSystem = thisgameObjectGetComponent<ParticleSystem>();
mParticleSystememissionRate = 00f;
mMaxParticles = mParticleSystemparticleCount;
mParticleSystemClear();
}
void Update()
{
if (mParticleSystem != null)
{
if (mParticleSystemparticleCount < mMaxParticles)
{
mParticleSystemEmit(mMaxParticles - mParticleSystemparticleCount);
}
}
}
}
实现过程是对于每个ParticleSystem添加一个额外的组件,通过该组件来原始PS的更新。其中的更新原则是判断当前活动的粒子数量,如果粒子数小于指定的最大值的话就再重新生成几个新的粒子出来进行填充。
此外,出于性能考虑,其中Update内部的 *** 作也可以移至FixedUpdate中进行以减少更新次数,但是视觉上并不会带来太大的差异。
你想用代码修改粒子中的哪一部分呢?
这里给你一个参考地址:>
在参考地址中,你可以找到各个Module中的参数,其中有详细的讲解和用法。其实使用代码控制粒子系统非常方便,但是首先你要理解粒子系统中的各部分。
比如你想修改main模块中的duration,那么你可以这样 *** 作:
public class ExampleClass : MonoBehaviour{private ParticleSystem ps;
void Start()
{
ps = GetComponent<ParticleSystem>();
psStop(); // Cannot set duration whilst particle system is playing
var main = psmain;
mainduration = 100f;
psPlay();
}
}
这里你可以打开MainModule模块的参考地址,那么里面就有你所需要的参数,其他模块类似。
有问题欢迎追加。
Hello,小伙伴们久等了, 让我们继续未竟之事
粒子在一个生命周期内应该有哪些属性的变化,才能达到多姿多彩且有趣的效果呢
我们不妨来思考一下:
这个模块简单明了,就是控制粒子在生命周期内的颜色,不做太多的说明啦
根据粒子速度的快慢显示不同的颜色
为了更好的调试出效果,我们把主模块的粒子的 Start Speed 设置为0, 打开刚学习的 Force over Lifetime 模块,使粒子的速度不断变化,然后就可以看到如下的效果:
该模块改变的是 Size 的属性,大家能想到哪些情况下会用到么我想到的是孙悟空收集元气d时,元气d会逐渐的变大,然后一声 Boom ,世界和平了!!
这个模块跟 Color by Speed 很相似,只不过一个改变的是 Color 属性,一个是 Size 属性
该模块也很简单,控制粒子生命周期内的旋转速度
项目中需要一个
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)