instanceID | 要检索其信息的对象的实例 ID。 |
obj | 要检索其 GUID 和文件 ID 的对象。 |
assetRef | 要为其获取 GUID 和文件 ID 的资源引用。 |
guid | 资源的 GUID。 |
localId | 该资源的本地文件标识符。 |
bool 如果成功找到 GUID 和文件 ID,则返回 true;否则,返回 false。
警告:请使用带有长型 localId 参数的重载。使用带有整数 localId 参数的重载可能会导致 localId 中的整数溢出。传递给 API 的对象是预制件的一部分时,可能会发生这种情况。
从对象实例 ID 中获取 GUID 和本地文件 ID。
当 Unity 序列化资源引用时,此函数会指向 GUID 和文件 ID。GUID 是唯一哈希值,文件 ID 是相对于资源的值。当序列化资源引用另一资源时,会使用这两个值。
如果使用文本序列化项目(请参阅 Editor Settings),可能需要手动修改此信息。常见用途是,将 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()); } }