Мне понадобилось немного времени, чтобы понять это. Кажется, что метки хранятся в виде списка LabelTable
в;
UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings;
Однако этот список является закрытым. В сценарии мы можем:
- добавить метку к
LabelTable
, вызвав AddressableAssetSettingsDefaultObject.Settings.AddLabel()
- удалить метку из
LabelTable
, вызвав AddressableAssetSettingsDefaultObject.Settings.RemoveLabel()
Кроме этих двух методов, нет другого способа доступа к LabelTable
Один из способов обойти это, используя System.Reflection
, что позволило бы нам обойти неопубликованные c доступ к LabelTable
.
AddressableAssetSettings settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings;
BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;
object labelTable = settings.GetType().GetProperty("labelTable", bindingFlags).GetValue(settings);
List<string> labelNames = (List<string>)labelTable.GetType().GetProperty("labelNames", bindingFlags).GetValue(labelTable);
Конечно, использование System.Reflection
вызовет удивление, так как мы пытаемся получить доступ к неопубликованному члену c. Однако в этом случае, я думаю, команда единства не продумала это до конца. Должен быть способ чтения этих ярлыков, чтобы мы могли их удалить, добавить в зависимости от того, что у нас в списке