繁体   English   中英

unityparticleSystem 主访问不能修改struct member 时访问的struct 不归类为变量

[英]Unity particleSystem main access cannot modify struct member when accessed struct is not classified as a variable

我有以下代码来修改 Unity 中ParticleSystem的属性

waterCone.main.loop = true;

但是,这给了我以下错误

属性“主”访问返回临时值。 访问的结构未分类为变量时无法修改结构成员

Unity自己的文档似乎显示此代码的使用如下

var waterConeMain = waterCone.main;
waterConeMain.loop = true;

完全没有错误。

为什么这样可以解决问题,就我对c#的理解而言,这应该是完全一样的。

事实上,据我所知,两者都不应该工作。

我试图在 Sharplab 中比较这两者,但第一个甚至无法编译。

这里发生了什么? 为什么这个变量是必要的?


(编辑)

通过查看源代码,看起来ParticleSystem.main正在这样做

MainModule main => new MainModule(this);

Main 是一个结构,它具有循环作为属性,例如

get => ParticleSystem.MainModule.get_loop_Injected(ref this);
set => ParticleSystem.MainModule.set_loop_Injected(ref this, value);

但实际上这似乎给我留下了比答案更多的问题,为什么当我不使用临时变量时这是一个编译错误

ParticleSystem.main的返回类型是 struct 类型,不能直接修改它的值。 不能这样做的主要原因是返回的struct值只是一个副本,所以这个时候修改值通常是没有意义的,会导致一些难以察觉的错误。 引用官方文档的解释

发生此错误是因为在赋值时复制了值类型。 当您从属性或索引器中检索值类型时,您将获得对象的副本,而不是对对象本身的引用。 返回的副本不由属性或索引器存储,因为它们实际上是方法,而不是存储位置(变量)。 您必须将副本存储到您声明的变量中,然后才能对其进行修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM