从 Unity 中的资产加载 material

Load material from assets in Unity

在我的 Assets 文件夹中,我有一个名为 Material 的文件夹,我在其中存储了所有需要的 materials,Material 文件夹中的 materials 之一是Night_Sky,我希望在游戏的某个时刻替换 day_sky 并将 Night_sky 设置为我的默认天空盒。我尝试了很多代码,所有代码都是 return 空对象,示例:

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

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

如何加载我的 Night_Sky material,或者是否有更简单的方法将我的天空盒切换到 night_sky 谢谢分享

这将不起作用,因为 Resources.Load 要求您将对象放在 Resources 文件夹中。此信息也可以在 Unity Docs

中找到

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

Assets/Resources/Materials/Night_Sky.mat

此外,加载 material 的脚本看起来还不错。

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

但是,当您确实使用 Resources.Load() 时,您需要牢记一些注意事项。 path 区分大小写,并且还需要您添加文件扩展名。所以在上面的例子中,这将导致:

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

Unity 5.0 或 >

作为Nika Kasradze mentioned in the comments. In unity 5.0 or up extensions must be omitted. Making the correct 语法

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