如何在 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.MinMaxCurve
是 struct
→ 值类型
就像例如Vector3
变量由 value 存储,而不是像 class
.[= 那样使用 reference 20=]
唯一的方法是存储对相应父 class
的引用,在您的情况下是 particleSystem
引用并通过它访问值。您可以通过
来存储此引用
[SerializeField] private ParticleSystem _particleSystem;
并通过检查器将其拖入。
但是,您可以通过 Inspector 存储和调整通用 ParticleSystem.MinMaxCurve
值,如果这正是您要查找的值
[SerializeField] private ParticleSystem.MinMaxCurve minMaxCurve;
我想保留对 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.MinMaxCurve
是 struct
→ 值类型
就像例如Vector3
变量由 value 存储,而不是像 class
.[= 那样使用 reference 20=]
唯一的方法是存储对相应父 class
的引用,在您的情况下是 particleSystem
引用并通过它访问值。您可以通过
[SerializeField] private ParticleSystem _particleSystem;
并通过检查器将其拖入。
但是,您可以通过 Inspector 存储和调整通用 ParticleSystem.MinMaxCurve
值,如果这正是您要查找的值
[SerializeField] private ParticleSystem.MinMaxCurve minMaxCurve;