从Unity中的资源加载材料

Tar*_*fih 5 assets unity-game-engine material unityscript

在我的Assets文件夹中,我有一个名为Material的文件夹,其中我存储了所有需要的材料,Material文件夹中的一个材料Night_Sky,我想在游戏的某个时刻替换day_sky并设置Night_sky为我的默认Skybox.我尝试了很多代码,所有代码都返回null对象,例如:

night = Resources.Load("Material", typeof(Material)) as Material;
Run Code Online (Sandbox Code Playgroud)

要么

night = Resources.Load("Material/Night_Sky.mat", typeof(Material)) as Material;
Run Code Online (Sandbox Code Playgroud)

如何加载我的Night_Sky素材,或者如果有更简单的方法来切换我的天空盒以night_sky感谢您分享它

MX *_*X D 9

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

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

Assets/Resources/Materials/Night_Sky.mat
Run Code Online (Sandbox Code Playgroud)

更多加载材料的脚本看起来很好.

如果您确实不希望使用资源文件夹,则可以尝试使用System.IO文件夹搜索选项获取材料.但我建议你只使用在Resources函数中构建.

Resources.Load()但是当你使用它时,你需要记住一些事情.该path是区分大小写的,并要求你添加的文件扩展名也.因此,在上面的示例中,这将导致:

myMaterial = Resources.Load("Materials/Night_Sky.mat"); 
Run Code Online (Sandbox Code Playgroud)

Unity 5.0或>

正如Nika Kasradze在评论中提到的那样.在unity 5.0或更高版本中必须省略扩展名.制作正确的语法

myMaterial = Resources.Load("Materials/Night_Sky"); 
Run Code Online (Sandbox Code Playgroud)