名称の重複について
UnityのAddressable AssetsではAsset Addressを文字列で名前指定して参照することができます。
Asset Referenceを使用していても、内部的にはこの文字列を使います。
これにより、重複する名称を設定すると正しく参照されないため、名前には気を付けないといけません。
例えば、うちに鯛と味噌という猫がいるんですが、このモデルをゲームで使うとします。
どちらもNeko.prefabという名前にしてしまうと、Simplify Entry Nameしたときに下のようにアドレスがNekoになってしまい、重複してしまいます。
(prefab名変えるのが普通だと思うので、これは極端な例です。)
同名でもラベルで分けたい
プロジェクトにあるLibrary内のAddressable Assetsのパッケージキャッシュに手を加えます。
なので、パッケージのアップデートがあった際などに巻き戻ったりするかもなので注意です。
Editor\GUI\AddressableAssetsSettingsGroupTreeView.csの657行目あたりに以下を追記
menu.AddItem (new GUIContent ("Simplify Entry Names With Label"), false, SimplifyAddressesWithLabel, selectedNodes);
同884行目あたりに以下を追記
protected void SimplifyAddressesWithLabel (object context) {
List<AssetEntryTreeViewItem> selectedNodes = context as List<AssetEntryTreeViewItem>;
if (selectedNodes == null || selectedNodes.Count < 1)
return;
var entries = new List<AddressableAssetEntry> ();
HashSet<AddressableAssetGroup> modifiedGroups = new HashSet<AddressableAssetGroup> ();
foreach (var item in selectedNodes) {
if (item.entry.labels == null || item.entry.labels.Count < 1) {
item.entry.SetAddress (Path.GetFileNameWithoutExtension (item.entry.AssetPath), false);
} else {
string label = m_Editor.settings.labelTable.GetString (item.entry.labels, 200);
item.entry.SetAddress (label.Replace (", ", "_") + "_" + Path.GetFileNameWithoutExtension (item.entry.AssetPath), false);
}
entries.Add (item.entry);
modifiedGroups.Add (item.entry.parentGroup);
}
foreach (var g in modifiedGroups)
g.SetDirty (AddressableAssetSettings.ModificationEvent.EntryModified, entries, false, true);
m_Editor.settings.SetDirty (AddressableAssetSettings.ModificationEvent.EntryModified, entries, true, false);
}
これでラベルを追加するSimplify Entry Name With Labelが増えます。
実行すると、{ラベル}_ファイル名というアドレス名になります。
できたけど、はたしてこういうラベル運用でいいのか・・・