从Unity的资源中加载材料

8

在我的资源文件夹中,我有一个名为“Material”的文件夹,其中存储了所有所需的材料。 Material文件夹中的一个材料是Night_Sky,我希望在游戏的某个时刻将其替换为day_sky并将Night_sky设置为默认的天空盒。 我尝试了许多代码,但它们都返回null对象,例如:

night = Resources.Load("Material", typeof(Material)) as Material;

或者

night = Resources.Load("Material/Night_Sky.mat", typeof(Material)) as Material;

我该如何加载我的 Night_Sky 材质,或者是否有更简单的方法将我的天空盒切换为 night_sky ,感谢您的分享。

1个回答

13

这样做无法起作用,因为Resources.Load要求您将对象放在Resources文件夹中。这些信息也可以在Unity文档中找到。

为了使其正常工作,您需要在Assets文件夹中创建一个名为Resources的文件夹。然后您可以将Material文件夹添加到其中。因此,文件夹结构应如下所示:

Assets/Resources/Materials/Night_Sky.mat

此外,加载材料的脚本看起来非常好。

如果您真的不想使用资源文件夹,可以尝试使用System.IO文件夹搜索选项获取材料。但我建议您只使用内置的资源函数。

然而,当您使用Resources.Load()时,需要记住几件事情。路径path区分大小写,同时需要添加文件扩展名。因此,在上面的示例中,结果为:

myMaterial = Resources.Load("Materials/Night_Sky.mat"); 

Unity 5.0或以上版本

正如Nika Kasradze在评论中提到的那样,在Unity 5.0或更高版本中,扩展名必须省略。正确的语法如下:

myMaterial = Resources.Load("Materials/Night_Sky"); 

1
这对我不起作用。我尝试了不同的方法,但是加载材质从来没有成功过。我也尝试了不同的目录以及带有和不带有后缀的方式,但是材质始终为空。在检查器中将材质设置为公共变量并不是问题。但我真的想知道如何通过编程方式加载它。 - Alex Cio
1
@亚历山大,如果它不能工作,请确保以下几点:大小写敏感性路径是区分大小写的。类型转换需要使用material或typeof(material)。还需要添加文件扩展名。要加载它,您必须从资源中转换路径,因此在上面的示例中,它将导致myMaterial = Resources.Load("Materials/Night_Sky.mat"); 您还可以查看此帖子上给出的答案。 - MX D
我可以通过最后的注释 myMaterial = Resources.Load("Materials/Night_Sky.mat"); 来获取材质。非常感谢。 - Sachin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接