如何在 Unity 中保留对粒子系统模块结构的引用

How to keep a reference to a Particle System module's struct in Unity

我想保留对 MinMaxCurve 的引用,这是某个粒子系统模块中的结构。

我需要这种能力来一般地引用任何 MinMaxCurve,而不是总是处理特定的模块和属性。

要点如下:

public class ParticleAttributeMultiplier : ParticleAttributeAdjuster {

    new private ParticleSystem particleSystem;
    private ParticleSystem.EmissionModule emission;
    private ParticleSystem.MinMaxCurve minMaxCurve;

    public override void Start () {
        particleSystem = GetComponent<ParticleSystem> ();
        emission = particleSystem.emission;
        minMaxCurve = emission.rateOverTime;
    }

    public override void Input (float intensity) {
        minMaxCurve = 1000f;
    }
}

这不起作用,因为 ,返回值:

public struct EmissionModule
{
    // ... 
    public MinMaxCurve rateOverTime { get; set; } // also a struct
    // ... 
}

是否有可能以任何方式将对 rateOverTime 的引用存储为 MinMaxCurve?


这似乎是问题的关键:

// "A property or indexer may not be passed as an out or ref parameter"
ref ParticleSystem.MinMaxCurve minMaxCurve = ref emission.rateOverTime;

非常感谢能解决我的问题的任何天才。

你不能。

ParticleSystem.MinMaxCurvestruct值类型

就像例如Vector3 变量由 value 存储,而不是像 class.[= 那样使用 reference 20=]

唯一的方法是存储对相应父 class 的引用,在您的情况下是 particleSystem 引用并通过它访问值。您可以通过

来存储此引用
 [SerializeField] private ParticleSystem _particleSystem;

并通过检查器将其拖入。


但是,您可以通过 Inspector 存储和调整通用 ParticleSystem.MinMaxCurve 值,如果这正是您要查找的值

[SerializeField] private ParticleSystem.MinMaxCurve minMaxCurve;