コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Addressable Asset System で IResourceLocation を Json 形式で出力するための構造体

概要

[Serializable]
public struct ResourceLocationJsonData
{
    [SerializeField] private string                     m_internalId;
    [SerializeField] private string                     m_primaryKey;
    [SerializeField] private string                     m_providerId;
    [SerializeField] private string                     m_resourceType;
    [SerializeField] private bool                       m_hasDependencies;
    [SerializeField] private int                        m_dependencyHashCode;
    [SerializeField] private ResourceLocationJsonData[] m_dependencies;

    public ResourceLocationJsonData( IResourceLocation location )
    {
        m_internalId         = location.InternalId;
        m_primaryKey         = location.PrimaryKey;
        m_providerId         = location.ProviderId;
        m_resourceType       = location.ResourceType.ToString();
        m_hasDependencies    = location.HasDependencies;
        m_dependencyHashCode = location.DependencyHashCode;

        m_dependencies = location.Dependencies
                .Select( c => new ResourceLocationJsonData( c ) )
                .ToArray()
            ;
    }

    public string ToJson()
    {
        return JsonUtility.ToJson( this );
    }

    public string ToPrettyJson()
    {
        return JsonUtility.ToJson( this, true );
    }
}

使用例

private string InternalIdTransformFunc( IResourceLocation location )
{
    var jsonData = new ResourceLocationJsonData( location );
    Debug.Log( jsonData.ToPrettyJson() );
    return internalId;
}