unity3d 为什么要这样设置ParticleSystem.main属性?

92dk7w1h  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(124)

在Unity手册中,我们被告知设置如下属性

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

我不明白为什么它能工作,因为mainstartDelay是值类型。
这是否意味着,main有复杂的setter与ParticleSystem对象的链接?这种方法的好处是什么?
现在我不能执行ps.main.startDelay = 5.0f;,但基本上拆分“error”不会给我错误。
我重新创建了一个简单的环境,来检查我是否正确理解了c#的值类型。如果你在类中有一个结构体,你不能像这样改变结构体的属性。它没有任何效果!

efzxgjgh

efzxgjgh1#

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

  • 〉是的!
    MainModule知道粒子系统,并且在引擎的底层原生c++层中实际发生了一些事情。
    这种做法的好处是什么?
    由于模块本身实际上并不做任何事情,只是作为一个到本机代码的链接,它是类还是结构体并不重要,除了在内存中处理引用类型与值类型的方式。
    他们只是想将某些功能聚集到模块中,以使其更容易使用......也可以直接将其全部放在ParticleSystem的API中,但这样会非常混乱,难以理解哪些功能属于一起。
    这基本上都归结为底层原生粒子的工作方式(我们没有任何相关信息,因为引擎的原生部分是不公开的)。
    那个
ps.main.startDelay = 5.0f;,

c#级别上是不允许的,这是我们必须处理的缺点-但显然这样做的好处要大于那样做的好处,而且基本上对几乎所有Unity API属性都是一样的-所以它又是一致的。

相关问题