본문 바로가기
Utils

Unity, 에셋 FileID 가져오기

by Client. DJ 2023. 5. 14.
반응형

인스펙터를 디버그 모드로 하면 보이는 파일 아이디(Local Identfier In File)

Local identifier in file

에셋의 파일 아이디를 가져오는 기능이 필요했는데, 아무래도 유니티에서는 지원하는 기원은 아닌가 보네요. 그저 구글링해서 얻은 기능이고 기록용으로 남깁니다.

스크립트

#if UNITY_EDITOR

using System.Reflection;
using UnityEditor;

public static class UnityEditorUtils
{
    /// <summary>
    /// 에셋의 파일 아이디 가져오기
    /// </summary>
    /// <param name="unityObject"></param>
    /// <returns></returns>
    public static int GetAssetFileID(UnityEngine.Object unityObject)
    {
        PropertyInfo inspectorModeInfo = typeof(SerializedObject).GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance);

        SerializedObject serializedObject = new SerializedObject(unityObject);
        inspectorModeInfo.SetValue(serializedObject, InspectorMode.Debug, null);

        SerializedProperty localIdProp = serializedObject.FindProperty("m_LocalIdentfierInFile");

        return localIdProp.intValue;
    }
}

#endif

예제

public override void OnInspectorGUI()
{
    base.OnInspectorGUI();

    // 파일 아이디 로그로 확인하는 버튼
    if (GUILayout.Button("Print File ID", GUILayout.Height(40)))
    {
        var navMeshData = AssetDatabase.LoadAssetAtPath<NavMeshData>("Asset/NavMesh.asste");
    	int fileId = UnityEditorUtils.GetAssetFileID(navMeshData);	
        UnityEngine.Debug.Log(fileId);
    }
}

마무리

파일 아이디를 가져오는 함수로 필요에 맞게 사용하시면 되겠습니다.


참고 : https://forum.unity.com/threads/how-to-get-the-local-identifier-in-file-for-scene-objects.265686/

 

반응형

댓글