在Unity手册中,我们被告知设置如下属性
ParticleSystem ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.startDelay = 5.0f;
我不明白为什么它能工作,因为main
和startDelay
是值类型。
这是否意味着,main
有复杂的setter与ParticleSystem
对象的链接?这种方法的好处是什么?
现在我不能执行ps.main.startDelay = 5.0f;
,但基本上拆分“error”不会给我错误。
我重新创建了一个简单的环境,来检查我是否正确理解了c#的值类型。如果你在类中有一个结构体,你不能像这样改变结构体的属性。它没有任何效果!
1条答案
按热度按时间efzxgjgh1#
这是否意味着main有复杂的setter,并链接到
ParticleSystem
对象?MainModule知道粒子系统,并且在引擎的底层原生
c++
层中实际发生了一些事情。这种做法的好处是什么?
由于模块本身实际上并不做任何事情,只是作为一个到本机代码的链接,它是类还是结构体并不重要,除了在内存中处理引用类型与值类型的方式。
他们只是想将某些功能聚集到模块中,以使其更容易使用......也可以直接将其全部放在ParticleSystem的API中,但这样会非常混乱,难以理解哪些功能属于一起。
这基本上都归结为底层原生粒子的工作方式(我们没有任何相关信息,因为引擎的原生部分是不公开的)。
那个
在
c#
级别上是不允许的,这是我们必须处理的缺点-但显然这样做的好处要大于那样做的好处,而且基本上对几乎所有Unity API属性都是一样的-所以它又是一致的。