如何在脚本中获取可寻址窗口中分配的可寻址标签?

问题描述 投票:0回答:2

通过Unity中新引入的可寻址,我们可以在可寻址窗口中为每个属于不同组的资产分配一个标签。

enter image description here

有没有办法在脚本中获得这些标签?

unity3d
2个回答
0
投票

有一个粗暴的方法。你可以修改负责组数据的文件。解析 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 等


0
投票

我花了点时间才弄明白这个问题,标签似乎被存储为 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 会引起人们的注意,因为我们正试图访问一个非公共成员。然而,在这个场合,我相信团结团队并没有考虑到这一点。应该有一种方法来阅读这些标签,这样我们就可以根据列表中的内容来删除、添加。

© www.soinside.com 2019 - 2024. All rights reserved.