从Unity中的预制件获取指导

时间:2016-10-18 23:34:06

标签: c# unity3d unity5

有点问题,我正在编写一个脚本,该脚本将从项目中检索所有未使用的材质和纹理并显示/删除它们。我从一个场景文件中去了GUID解析的路径,但是遇到了一些问题,如果不能解决这个问题,就不可能解决这个问题。

1)在场景" .unity"文件,当使用预制件时,它只包含这个预制件的GUID,但是预制件本身包含子对象 - 它们如何可以访问? 例如:

Prefab:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 0}
    m_Modifications:
    - target: {fileID: 444956, guid: 6a526c61069224c92930d52849053cbe, type: 2}
      propertyPath: m_LocalPosition.x
      value: 0
      objectReference: {fileID: 0}

同样在项目视图中,没有超过第二层次结构级别的子项: enter image description here

我想做什么 - 以某种方式获得所使用的所有材料和纹理,例如" Ceiling"在场景中。考虑到" Blue" prefab在运行时加载,不在场景中,所以我只能从monobehaviour中获取root guid。

2)即使我以某种方式获得所有使用的材料,如何正确获取它们使用的纹理而无需访问游戏对象的渲染器,只需这些:

enter image description here

我知道它有点混乱的问题,所以请问,是否有些事情不清楚。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可能需要:AssetDatabase.GUIDToAssetPath(string guid);

  1. 您有父预制 - >你可以提取所有guid个孩子 - >你可以找到儿童预制件 - >你可以提取他们孩子的所有guid等等......
  2. 你有一个材料 - &gt;您可以提取所有guid使用过的材料 然后你可以用AssetDatabase.GUIDToAssetPath(string guid)来获取 所有使用的纹理路径。 Resources.Load<Texture2D>(string assetPath);可用于获取实际纹理。
  3. 我担心无法在运行时访问预装。只是 像着色器。如果在运行时加载着色器而忘记添加 到AlwaysIncludedShaders你会得到粉红色的东西 仅在构建版本上,但在编辑器中播放时不会。即便是Unity也无法解决这个问题。至少还没有。
  4. 您可能感兴趣的更多方法:
    EditorUtility.CollectDependencies();
    EditorUtility.CollectDeepHierarchy();