有点问题,我正在编写一个脚本,该脚本将从项目中检索所有未使用的材质和纹理并显示/删除它们。我从一个场景文件中去了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}
我想做什么 - 以某种方式获得所使用的所有材料和纹理,例如" Ceiling"在场景中。考虑到" Blue" prefab在运行时加载,不在场景中,所以我只能从monobehaviour中获取root guid。
2)即使我以某种方式获得所有使用的材料,如何正确获取它们使用的纹理而无需访问游戏对象的渲染器,只需这些:
我知道它有点混乱的问题,所以请问,是否有些事情不清楚。提前谢谢。
答案 0 :(得分:2)
您可能需要:AssetDatabase.GUIDToAssetPath(string guid);
guid
个孩子
- >你可以找到儿童预制件 - >你可以提取他们孩子的所有guid
等等...... guid
使用过的材料
然后你可以用AssetDatabase.GUIDToAssetPath(string guid)
来获取
所有使用的纹理路径。 Resources.Load<Texture2D>(string assetPath);
可用于获取实际纹理。AlwaysIncludedShaders
你会得到粉红色的东西
仅在构建版本上,但在编辑器中播放时不会。即便是Unity也无法解决这个问题。至少还没有。您可能感兴趣的更多方法:
EditorUtility.CollectDependencies();
EditorUtility.CollectDeepHierarchy();