unity3D中如何通过脚本控制粒子初始速度?

我是这样写的:public ParticleSystem water;public float speed = ... 我是这样写的:
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

应该怎么办?
展开
 我来答
缑友曦1573
2017-05-16 · TA获得超过1594个赞
知道小有建树答主
回答量:2589
采纳率:0%
帮助的人:468万
展开全部
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中进行以减少更新次数,但是视觉上并不会带来太大的差异。
百度网友5435d26
2017-09-05
知道答主
回答量:7
采纳率:0%
帮助的人:4.3万
展开全部
不能直接赋值的,需要用个变量来赋值
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;
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式