AssetDatabase.TryGetGUIDAndLocalFileIdentifier

切换到手册
Obsolete public static bool TryGetGUIDAndLocalFileIdentifier (Object obj, out string guid, out int localId);
Obsolete public static bool TryGetGUIDAndLocalFileIdentifier (int instanceID, out string guid, out int localId);
public static bool TryGetGUIDAndLocalFileIdentifier (Object obj, out string guid, out long localId);
public static bool TryGetGUIDAndLocalFileIdentifier (int instanceID, out string guid, out long localId);

参数

instanceID要检索其信息的对象的实例 ID。
obj要检索其 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()); } }