Unity修改粒⼦参数
Unity新版本的粒⼦代码框架更改过,之前的很多api是不能⽤的。
新版本的粒⼦效果把整个数据分成了⼏⼤模块,每个模块是⼀个struct
public struct MainModule
{
public float duration { get; t; }
public float startRotationXMultiplier { get; t; }
public MinMaxCurve startRotationY { get; t; }
public float startRotationYMultiplier { get; t; }.
public MinMaxCurve startRotationZ { get; t; }
public float startRotationZMultiplier { get; t; }
public float flipRotation { get; t; }
public MinMaxGradient startColor { get; t; }
public MinMaxCurve gravityModifier { get; t; }
public float gravityModifierMultiplier { get; t; }
public ParticleSystemSimulationSpace simulationSpace { get; t; }
public Transform customSimulationSpace { get; t; }
public float simulationSpeed { get; t; }
public bool uUnscaledTime { get; t; }
交通综合执法public ParticleSystemScalingMode scalingMode { get; t; }
public bool playOnAwake { get; t; }
public int maxParticles { get; t; }
public ParticleSystemEmitterVelocityMode emitterVelocityMode { get; t; }
public MinMaxCurve startRotationX { get; t; }
public ParticleSystemStopAction stopAction { get; t; }
public float startRotationMultiplier { get; t; }
public bool startRotation3D { get; t; }
public bool loop { get; t; }
public bool prewarm { get; t; }
public float startDelayMultiplier { get; t; }
public MinMaxCurve startLifetime { get; t; }
public float startLifetimeMultiplier { get; t; }
public MinMaxCurve startSpeed { get; t; }
自叹弗如注意安全的句子
public float startSpeedMultiplier { get; t; }
public bool startSize3D { get; t; }
public MinMaxCurve startSize { get; t; }
public float startSizeMultiplier { get; t; }
public MinMaxCurve startSizeX { get; t; }
不禁造句public float startSizeXMultiplier { get; t; }
征兵工作public MinMaxCurve startSizeY { get; t; }
public float startSizeYMultiplier { get; t; }
public MinMaxCurve startSizeZ { get; t; }
public float startSizeZMultiplier { get; t; }
public MinMaxCurve startRotation { get; t; }
[Obsolete("Plea u flipRotation instead. (UnityUpgradable) -> UnityEngine.ParticleSystem/MainModule.flipRotation", fal)] public float randomizeRotationDirection { get; t; }
}
这是MainModule的代码,主要是修改粒⼦修过最上⾯部分。ParticleSystem中有main字段是保存MainModule数据的。然后今天看⽹上说修改⽅式
ParticleSystem.MainModule main = m_particle.main;
main.duration = tting.duration;
main.loop = fal;
当时觉得不可能这样修改,但是测试后确实可以。为什么觉得不可能呢?因为MainModule是值类型,你修改main的值,是不可能影响到ParticleSystem中的main的。
于是就查看了MainModule源码,截取部分:
public struct MainModule
{
三年级数学应用题100道草莓沙拉private ParticleSystem m_ParticleSystem;
public float duration
{
get
{
return ParticleSystem.MainModule.GetDuration(this.m_ParticleSystem);
}
t
{
ParticleSystem.MainModule.SetDuration(this.m_ParticleSystem, value);
}
}
public bool loop
{
get
{芒果英语怎么说
return ParticleSystem.MainModule.GetLoop(this.m_ParticleSystem);
}
t
{
ParticleSystem.MainModule.SetLoop(this.m_ParticleSystem, value);
}
}
}
看这个应该就明⽩了,每个Module中应该都保存了ParticleSystem 。然后t⽅法中,通过ParticleSystem修改的,因为ParticleSystem是引⽤类型,因此这样修改就应⽤到ParticleSystem中了
最后补充⼀句 ParticleSystem.main.loop = fale; 这种写法是不⾏的,值类型是不允许这样修改的, ParticleSystem.main通过get返回的是值类型,修改是不影响ParticleSystem.main的,因此这种⽅法被编译禁⽌,会报错的