コガネブログ

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

【Unity】Addressable Asset System の AddressableAssetSettings に登録されているグループが重複していないか確認するテストコード

概要

using System.Linq;
using NUnit.Framework;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;

public sealed class Addressables用テスト
{
    private sealed class DuplicateGroupResult
    {
        private readonly string m_groupName;
        private readonly string m_groupGuid;

        public DuplicateGroupResult( IGrouping<string, AddressableAssetGroup> duplicate )
        {
            m_groupName = duplicate.First().Name;
            m_groupGuid = duplicate.Key;
        }

        public override string ToString()
        {
            return $"{m_groupName},{m_groupGuid}";
        }
    }

    [Test]
    public void AddressableAssetSettingsに登録されているグループが重複していないか()
    {
        var settings = AddressableAssetSettingsDefaultObject.Settings;

        if ( settings == null ) return;

        var groups = settings.groups;

        var duplicates = groups
                .Where( x => !x.Name.Contains( "Built In Data" ) )
                .GroupBy( x => x.Guid )
                .Where( x => 1 < x.Count() )
                .Select( x => new DuplicateGroupResult( x ) )
                .ToArray()
            ;

        if ( duplicates.Length <= 0 ) return;

        Assert.Fail
        (
            $@"AddressableAssetSettings に重複して登録されているグループが存在します
--------------------------------------------------------------------------------
{string.Join( "\n", duplicates.Select( x => x.ToString() ) )}
--------------------------------------------------------------------------------"
        );
    }
}
  • AddressableAssetSettings.asset がコンフリクトして解消した時に誤って m_GroupAssets に同 guid のアセットが複数登録されてしまったりすると、ビルド時にエラーが発生するため、事前に確認するためのテストコード