You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#脚本修改粒子系统的双常量随机与常量属性?

解决Unity粒子系统「双常量随机」和「常量」属性修改问题

问题核心在于Unity的粒子系统模块(比如MainModule、EmissionModule)是值类型,你直接取出startSpeed这类属性修改的只是副本,不会同步到粒子系统组件上。必须先获取整个模块的副本,修改后再重新赋值给粒子系统才能生效。

以下是修正后的完整代码:

// Particle fields
ParticleSystem particle;

private void Awake()
{
    Initialization();

    // 修改Main模块参数(startSpeed、startSize)
    var mainModule = particle.main;
    // 处理startSpeed:设置为双常量随机模式并放大数值
    mainModule.startSpeed.mode = ParticleSystemCurveMode.TwoConstants;
    mainModule.startSpeed.constantMin *= 1.2f;
    mainModule.startSpeed.constantMax *= 1.2f;
    // 处理startSize:设置为常量模式并放大数值
    mainModule.startSize.mode = ParticleSystemCurveMode.Constant;
    mainModule.startSize.constant *= 1.2f;
    // 将修改后的模块赋值回粒子系统,使改动生效
    particle.main = mainModule;

    // 修改Emission模块的rateOverTime
    var emissionModule = particle.emission;
    emissionModule.rateOverTime.mode = ParticleSystemCurveMode.Constant;
    emissionModule.rateOverTime.constant *= 1.2f;
    particle.emission = emissionModule;
}

private void Initialization()
{
    particle = GetComponent<ParticleSystem>(); // 假设脚本与粒子系统挂载在同一物体上
}

关键说明:

  • ParticleSystem.main、ParticleSystem.emission返回的是值类型对象,不是引用。必须先拿到模块副本,修改完成后再赋值回粒子系统,才能让参数变化生效。
  • 你之前尝试的particle.main.startSpeed = startSpeed报错,本质是不能直接修改值类型的返回结果,必须通过模块副本中转操作。
  • 无需单独声明MinMaxCurve类型字段,直接在模块副本上修改参数即可。

内容的提问来源于stack exchange,提问作者draymone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:43:13