我尝试使用此代码更改我的对象的图像(使用作为Sprite 强制转换):
GetComponent<SpriteRenderer>().sprite = Resources.Load("GameObjects/Tiles/Hole") as Sprite;
它不起作用,但这有效(使用&lt; Sprite&gt; ):
GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("GameObjects/Tiles/Hole");
有什么区别?
答案 0 :(得分:4)
FunctionR的答案可能是更常见的答案,我可能在这里错了,但我认为Load()
和Load<T>()
之间的区别在于Load<T>()
检查元数据。 “Hole”不是Sprite
,它是一个图像文件。 Load()
找到该图像文件并将其加载为文件类型的默认类型,在本例中为Texture2D
。
换句话说,您无法使用as Sprite
,因为您无法cast
Texture2D
到Sprite
。但是,您可以使用
Texture2D = Resources.Load("GameObjects/Tiles/Hole");
Rect rect = {whatever};
Vector2 pivot = {whatever};
Sprite.Create(texture, rect, pivot);
但这需要您知道您尝试加载的Sprite
的大小。
总之,Load()
仅根据您要加载的文件类型对其进行处理,Load<T>()
包含元数据。
答案 1 :(得分:3)
Resources.Load("GameObjects/Tiles/Hole") as Sprite;
您的Resources文件夹中有另一个“Hole”。此 other-Hole 不是Sprite
。因此,当您使用as Sprite
时,它根本无法转换为一个并且不会抛出异常(在该行上),因为:
as运算符就像一个强制转换操作。但是,如果转换 是不可能的,因为返回null而不是引发异常。
Resources.Load<Sprite>("GameObjects/Tiles/Hole");
在工作代码中,您可以指定所需的文件Sprite
,以便找到正确的文件。