instanceID | 要检索信息的对象的 InstanceID。 |
obj | 要检索 GUID 和文件 ID 的对象。 |
assetRef | 要检索 GUID 和文件 ID 的资源引用。 |
guid | 资源的 GUID。 |
localId | 该资源的本地文件标识符。 |
bool 如果成功找到 guid 和文件 ID,则为 True,否则为 False。
从对象实例 ID 获取 GUID 和本地文件 ID。
警告: 避免使用此函数的已弃用版本,这些版本使用 int
作为 localId
参数而不是 long
。在某些情况下,本地 ID 可能比 32 位更长,例如预制件。当 Unity 序列化资源引用时,它会指向两个东西:GUID 和文件 ID。GUID 是一个唯一的哈希值,文件 ID 是相对于资源的值。这两个值都用于序列化资源引用另一个资源时。
如果使用文本序列化项目(请参阅 编辑器设置),则可以手动修改此信息。一个常见的用途是从项目中将 C# 脚本文件移动到 DLL,同时保持使用这些脚本的所有游戏对象完好无损。例如,假设您的项目包含一个 C# MonoBehaviour、一个场景和一个附加了此脚本的游戏对象。序列化时,Unity 场景文件将包含类似以下内容(简化为相关部分)
/* example .unity Scene contents:
--- !u!1 &65078845 GameObject: m_Component: -component: {fileID : 65078850} --- !u!114 &65078850 MonoBehaviour: m_Script: {fileID : 11500000, guid : 9cbd8cdf99d44b58972fbc7f6f38088f, type : 3}
*/
using System.Text; using UnityEngine; using UnityEditor;
class ShowAssetIds { [MenuItem("Assets/Show Asset Ids")] static void MenuShowIds() { var stringBuilder = new StringBuilder();
foreach (var obj in AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(Selection.activeObject))) { string guid; long file;
if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(obj, out guid, out file)) { stringBuilder.AppendFormat("Asset: " + obj.name + "\n Instance ID: " + obj.GetInstanceID() + "\n GUID: " + guid + "\n File ID: " + file); } }
Debug.Log(stringBuilder.ToString()); } }
其他资源: GlobalObjectId