unity3D中如何通过脚本控制粒子初始速度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity3D中如何通过脚本控制粒子初始速度?相关的知识,希望对你有一定的参考价值。
我是这样写的:
public ParticleSystem water;
public float speed = 20;
water.main.startSpeedMultiplier= speed ;
可是系统提示:
Assets/Script/SpeedControl.cs(22,14): error CS1612: Cannot modify a value type return value of `UnityEngine.ParticleSystem.main'. Consider storing the value in a temporary variable
应该怎么办?
这里可以通过手动产生粒子的方式来实现,也即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 = this.gameObject.GetComponent<ParticleSystem>();
mParticleSystem.emissionRate = 0.0f;
mMaxParticles = mParticleSystem.particleCount;
mParticleSystem.Clear();
void Update()
if (mParticleSystem != null)
if (mParticleSystem.particleCount < mMaxParticles)
mParticleSystem.Emit(mMaxParticles - mParticleSystem.particleCount);
实现过程是对于每个ParticleSystem添加一个额外的组件,通过该组件来原始PS的更新。其中的更新原则是判断当前活动的粒子数量,如果粒子数小于指定的最大值的话就再重新生成几个新的粒子出来进行填充。
此外,出于性能考虑,其中Update内部的操作也可以移至FixedUpdate中进行以减少更新次数,但是视觉上并不会带来太大的差异。 参考技术A 不能直接赋值的,需要用个变量来赋值
public class ExampleClass : MonoBehaviour
void Start()
ParticleSystem ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.startDelay = 5.0f;
main.startLifetime = 2.0f;
main.startSpeed = 2.0f;
unity5.1 particle systems怎么控制粒子速度
参考技术A 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 = this.gameObject.GetComponent<ParticleSystem>();
mParticleSystem.emissionRate = 0.0f;
mMaxParticles = mParticleSystem.particleCount;
mParticleSystem.Clear();
void Update()
if (mParticleSystem != null)
if (mParticleSystem.particleCount < mMaxParticles)
mParticleSystem.Emit(mMaxParticles - mParticleSystem.particleCount);
实现过程是对于每个ParticleSystem添加一个额外的组件,通过该组件来原始PS的更新。其中的更新原则是判断当前活动的粒子数量,如果粒子数小于指定的最大值的话就再重新生成几个新的粒子出来进行填充。
此外,出于性能考虑,其中Update内部的操作也可以移至FixedUpdate中进行以减少更新次数,但是视觉上并不会带来太大的差异。
以上是关于unity3D中如何通过脚本控制粒子初始速度?的主要内容,如果未能解决你的问题,请参考以下文章
unity3d 有个官方的车的例子 速度为啥乘2.23693629?
unity3d 在代码中怎样控制粒子特效的重新播放与停止?答案最好详细点,可以加分