从 Unity 中的预制件获取 guid
Getting guid's from prefabs in Unity
有点具体的问题,我正在编写一个脚本,该脚本将从项目中检索所有未使用的材料和纹理,并 show/delete 它们。我从场景文件中通过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" 预制件是在运行时加载的,不存在于场景中,所以我只能从 monobehaviour 中获取根 guid。
2) 即使我以某种方式获得所有使用过的材质,如何在不访问游戏对象渲染器的情况下正确获取它们使用的纹理,只有这些:
我知道这是一个有点混乱的问题,所以请问是否有不清楚的地方。提前致谢。
您可能需要这个:AssetDatabase.GUIDToAssetPath(string guid);
- 您有 parent 个预制件 -> 您可以提取其 children 的所有
guid
-> 你可以找到 children 个预制件 -> 你可以提取他们 children 的所有 guid
等等...
- 你有一个 material -> 你可以提取它使用过的所有
guid
material
然后你可以使用 AssetDatabase.GUIDToAssetPath(string guid)
得到
所有使用的纹理路径。 Resources.Load<Texture2D>(string assetPath);
可用于获取实际纹理。
- 恐怕无法访问在 run-time 加载的预制件。只是
像着色器。如果您在运行时加载着色器而忘记添加
它到
AlwaysIncludedShaders
你会得到粉红色的东西
仅在构建版本上而不是在编辑器中播放时。即使是 Unity 也无法解决该问题。至少现在还没有。
还有一些您可能感兴趣的方法:
EditorUtility.CollectDependencies();
EditorUtility.CollectDeepHierarchy();
有点具体的问题,我正在编写一个脚本,该脚本将从项目中检索所有未使用的材料和纹理,并 show/delete 它们。我从场景文件中通过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" 预制件是在运行时加载的,不存在于场景中,所以我只能从 monobehaviour 中获取根 guid。
2) 即使我以某种方式获得所有使用过的材质,如何在不访问游戏对象渲染器的情况下正确获取它们使用的纹理,只有这些:
我知道这是一个有点混乱的问题,所以请问是否有不清楚的地方。提前致谢。
您可能需要这个:AssetDatabase.GUIDToAssetPath(string guid);
- 您有 parent 个预制件 -> 您可以提取其 children 的所有
guid
-> 你可以找到 children 个预制件 -> 你可以提取他们 children 的所有guid
等等... - 你有一个 material -> 你可以提取它使用过的所有
guid
material 然后你可以使用AssetDatabase.GUIDToAssetPath(string guid)
得到 所有使用的纹理路径。Resources.Load<Texture2D>(string assetPath);
可用于获取实际纹理。 - 恐怕无法访问在 run-time 加载的预制件。只是
像着色器。如果您在运行时加载着色器而忘记添加
它到
AlwaysIncludedShaders
你会得到粉红色的东西 仅在构建版本上而不是在编辑器中播放时。即使是 Unity 也无法解决该问题。至少现在还没有。
还有一些您可能感兴趣的方法:
EditorUtility.CollectDependencies();
EditorUtility.CollectDeepHierarchy();