版本: Unity 6 (6000.0)
语言英语
  • C#

AssetDatabase.TryGetGUIDAndLocalFileIdentifier

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每个建议并根据需要进行更新。

关闭

提交失败

由于某些原因,您的建议修改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static bool TryGetGUIDAndLocalFileIdentifier(Object obj, out string guid, out long localId);

声明

public static bool TryGetGUIDAndLocalFileIdentifier(int instanceID, out string guid, out long localId);

声明

public static bool TryGetGUIDAndLocalFileIdentifier(LazyLoadReference<T> assetRef, out string guid, out long localId);

参数

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