在我的Assets文件夹中,我有一个名为Material的文件夹,我存储了所有需要的材料,Material文件夹中的一个材料是Night_Sky
,我希望在游戏的某个时刻替换{ {1}}并将day_sky
设置为我的默认Skybox。我尝试了很多代码,所有代码都返回null对象,例如:
Night_sky
或
night = Resources.Load("Material", typeof(Material)) as Material;
如何加载night = Resources.Load("Material/Night_Sky.mat", typeof(Material)) as Material;
素材,或者如果有更简单的方法将天空盒切换为Night_Sky
,感谢您分享
答案 0 :(得分:8)
这不起作用,因为Resources.Load要求您将对象放在Resources文件夹中。此信息也可以在Unity Docs
中找到为了使其正常工作,您需要在Assets文件夹中创建名为Resources的文件夹。之后,您可以将Material文件夹添加到此文件夹中。所以文件夹结构看起来如下
Assets/Resources/Materials/Night_Sky.mat
更多加载材料的脚本看起来很好。
如果您确实不想使用资源文件夹,则可以尝试使用System.IO文件夹搜索选项获取材料。但我建议你只使用在Resources函数中构建。
但是,当您使用Resources.Load()
时,您需要记住一些事项。 path
区分大小写,并且还要求您添加文件扩展名。因此,在上面的示例中,这将导致:
myMaterial = Resources.Load("Materials/Night_Sky.mat");
评论中提及的Nika Kasradze。在unity 5.0或更高版本中必须省略扩展名。制作正确的unity5语法
myMaterial = Resources.Load("Materials/Night_Sky");