有一个粗暴的方法。你可以修改负责组数据的文件。解析 AddressableAssetsData/AssetGroups[your_group_name].asset文件,然后手动添加标签到m_SerializedLabels字段。例如:修改为:m_GUID: 5f0bfe8eea13575418016bf83784f8e0 m_Address: m_Address: SomeAssetAddress m_ReadOnly: 0 m_SerializedLabels: []
to this: m_GUID: 5f0bfe8eea13575418016bf83784f8e0 m_Address: DefaultAvatarAnimation m_ReadOnly. 0 m_SerializedLabels: 0 m_SerializedLabels: - label1 - label2 等
我花了点时间才弄明白这个问题,标签似乎被存储为 LabelTable
列表中。
UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings;
然而这个列表是私有的。在脚本中,我们可以
LabelTable
呼叫 AddressableAssetSettingsDefaultObject.Settings.AddLabel()
LabelTable
呼叫 AddressableAssetSettingsDefaultObject.Settings.RemoveLabel()
除了这两种方法之外,没有其他的方法可以访问。LabelTable
我们可以通过使用 System.Reflection
这将使我们能够绕过非公开的访问,进入到 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
会引起人们的注意,因为我们正试图访问一个非公共成员。然而,在这个场合,我相信团结团队并没有考虑到这一点。应该有一种方法来阅读这些标签,这样我们就可以根据列表中的内容来删除、添加。