【问题标题】:List of materials in UnityUnity中的材质列表
【发布时间】:2016-08-15 23:37:07
【问题描述】:

Unity项目中有一个文件夹,里面有一些材质文件。这些材质可以分配给各种网格等。我想要一个这些材质的列表,并在 Update() 中循环这个列表。

有没有办法自动维护这个列表 - 我将一个材质文件添加到文件夹中,并将相应的材质对象添加到这个列表中?

【问题讨论】:

  • 你想在编辑器模式还是运行时这样做?
  • Umair的问题真好,请回答。但是,如果您只想在运行时执行此操作,您可以创建一个材质数组,然后更改索引并将新材质分配给网格。
  • 我想在运行时拥有这个列表。

标签: c# unity3d 3d


【解决方案1】:

您需要循环浏览文件夹并找到每个带有.mat 扩展名的文件,然后手动加载它。

查看 System.IO 中的 c# FileDirectory 类以获取材料文件的名称。 接下来通过Resources.Load() i-e 加载它们:

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

编辑: 上述解决方案仅适用于 EDITOR,因为您无法在构建中使用 System.IO 获取材料名称。 Resources.Load 在构建中可以正常工作,但您需要材料名称。 如 cmets Resources.LoadAll() 中所述,将完成这项工作。 此外,对于Resources.Load()Resources.LoadAll(),您需要将所有要加载的材料放入Resources 文件夹中,即:

如果你的材料的路径是:Assets\Resources\Materials你需要使用:

Resources.LoadAll("Materials")

有用的文档链接:
Resources.LoadAll
LoadingResourcesatRuntime

【讨论】:

  • 对不起,我认为这只适用于编辑器。但是,如果您将所有材料保存在一个文件夹中,您可以使用 Resources.LoadAll()。 docs.unity3d.com/ScriptReference/Resources.LoadAll.html
  • 还有 Resources.LoadAll() docs.unity3d.com/ScriptReference/Resources.LoadAll.html * 被@Krajca 打败 18secs :)
  • 我想在运行时有这个列表。
  • 加载资源在构建中工作。查看此以获取更多信息:docs.unity3d.com/Manual/LoadingResourcesatRuntime.html
  • 这是问题的正确答案。 Resources.Load 也可以在编辑器和构建中使用。您需要修改此答案。大多数东西都是错的。 “查看 System.IO 中的 c# File 和 Directory 类以获取材料文件的名称。” System.IO 与 Resources.Load 无关,也不适用于 Resources.Load。您还必须从代码中删除“.mat”。当你把文件扩展名,它不会工作。您还应该输入您的答案,OP 必须将 Material 文件夹放在 Resources 文件夹中,该文件夹位于 Assets\Resources 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2021-11-04
相关资源
最近更新 更多