Объявление
public static bool TryGetGUIDAndLocalFileIdentifier(Object obj, out string guid, out int localId); Устаревший Пожалуйста, используйте перегрузку этой функции, которая использует длинный тип данных для параметра localId, потому что эта версия может возвращать переполненный localID. Это может произойти при вызове объектов, которые являются частью префаба.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);
public static bool TryGetGUIDAndLocalFileIdentifier(LazyLoadReference
Параметры
instanceID | InstanceID объекта, для которого требуется получить информацию. |
obj | Объект, для которого необходимо получить GUID и идентификатор файла. |
assetRef | Ссылка на ресурс, для которого необходимо получить GUID и идентификатор файла. |
guid | GUID актива. |
localId | Идентификатор локального файла этого актива. |
Возвращает
bool true, если guid и идентификатор файла были успешно найдены, в противном случае — false.
Описание
Получить GUID и идентификатор локального файла из идентификатора экземпляра объекта.
Предупреждение. Избегайте устаревших версий этой функции, которые используют int
для localId
. параметр вместо long
. В некоторых случаях локальные идентификаторы могут быть длиннее 32 бит, например, для префабов. Когда Unity сериализует ссылку на ресурс, она указывает на две вещи: GUID и идентификатор файла. GUID — это уникальный хэш, а идентификатор файла — это значение относительно актива. Оба эти значения используются, когда сериализованный объект ссылается на другой объект.
При работе с текстовым сериализованным проектом (см. Настройки редактора) эту информацию можно изменить вручную. Обычное использование — перемещение файлов сценариев C# из проекта в библиотеку DLL с сохранением любых игровых объектов, использующих эти сценарии, нетронутыми. В качестве примера предположим, что ваш проект содержит C# MonoBehaviour, Scene и GameObject с прикрепленным этим сценарием. При сериализации файл сцены 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());
}
}