当我尝试切换我发布的网站时,我不小心越过了帖子。哎呀! https://gamedev.stackexchange.com/questions/120309/why-can-i-not-change-a-sprite-directly/120311#120311
我正在更改图像数组上的精灵。我可以想到两种方法。第一种方式是:
var images = GetComponentsInChildren<Image>();
foreach(var image in images)
{
if (!image.sprite)
{
image.sprite = GetMySprite();
}
}
这种方式非常有效。但是,如果我试图像这样抓住精灵本身:
var images = GetComponentsInChildren<Image>();
foreach(var image in images)
{
var sprite = image.sprite;
if (!sprite)
{
sprite = GetMySprite();
}
}
它不起作用。 Sprite被赋值,但它不是原始的Sprite。附加到图像的Sprite保持为空。
起初我想,也许Sprite是一个结构?但它不是 - 它是一个扩展Object的密封类。 (我认为无论如何都不一定能解释它。)
那么为什么我必须在更改其Sprite属性时保留对Image的引用?
答案 0 :(得分:2)
在两个实例中,sprite字段都是对sprite对象的引用。在第二个示例中,您将创建一个局部变量,该变量也是对精灵对象的引用 - 您可以通过复制image.sprite中的值来初始化。请注意,“var sprite”不是对“image.sprite”本身的引用。
在第二个示例中,您只修改局部变量的值,保持原始值不变。