【问题标题】:Why setting ParticleSystem.main properties works like this?为什么设置 ParticleSystem.main 属性是这样的?
【发布时间】:2023-01-08 04:29:02
【问题描述】:

在 Unity 手册中,我们被告知要像这样设置属性

ParticleSystem ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.startDelay = 5.0f;

我不明白为什么它会起作用,因为 mainstartDelay 是值类型。

这是否意味着 main 有复杂的 setter 链接到 ParticleSystem 对象?这种方法的好处是什么?

现在我不能做ps.main.startDelay = 5.0f;,但本质上拆分“错误”不会给我任何错误。

我重新创建了原始环境,以检查我是否正确理解了 C# 值类型。 如果您在类中有一个结构,则不能像这样更改结构属性。它没有任何影响!

【问题讨论】:

    标签: c# unity3d value-type particle-system


    【解决方案1】:

    这是否意味着 main 有复杂的 setter 链接到 ParticleSystem 对象?

    -> 是的!

    MainModule 知道粒子系统,事情实际上发生在引擎的底层原生 c++ 层中。

    这种方法的好处是什么?

    由于模块本身实际上并没有做任何事情,只是作为到本机代码的链接,所以它是类还是结构并不重要,除了引用类型与值类型在内存中的处理方式。

    他们只是想将某些功能集中到模块中以使其更易于使用......它也可以直接包含在 ParticleSystem 的 API 中,但这样会非常混乱并且难以理解什么属于一起。

    这基本上都归结为底层原生粒子的工作方式(我们没有任何信息,因为引擎的原生部分不公开)。

    ps.main.startDelay = 5.0f;,
    

    c# 级别上是不允许的,这是我们必须处理的缺点 - 但显然采用这种方式的优势大于那种方式,并且对于几乎所有 Unity API 属性来说基本上是相同的 - 所以它再次保持一致。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2019-05-23
      • 2014-09-22
      • 2012-04-23
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多