/// <summary> /// Generate a group name from a asset path. /// </summary> /// <param name="assetPath"></param> /// <param name="packingMode"></param> /// <returns></returns> /// <exception cref="InvalidOperationException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception> public string GenerateFromAssetPath(string assetPath, PackingMode packingMode) { switch (packingMode) { case PackingMode.PackByAddressablesFolder: var addressableFolderRegex = new Regex($"(?<folder_path>^Assets.*/{Paths.GetAddressablesFolderName()})/"); var match = addressableFolderRegex.Match(assetPath); if (!match.Success) { return(string.Empty); } var addressableFolderPath = match.Groups["folder_path"].Value; var guid = _assetDatabaseAdapter.AssetPathToGUID(addressableFolderPath); if (string.IsNullOrEmpty(guid)) { return(string.Empty); } guid = guid.Substring(0, 7); return($"{Paths.GetDefaultGroupName()}_{guid}"); case PackingMode.PackTogether: return(Paths.GetDefaultGroupName()); default: throw new ArgumentOutOfRangeException(); } }
private void CreateOrMoveEntry(string assetPath, string groupName, string address, bool removeBeforeGroupIfEmpty, string[] labels) { Assert.IsFalse(string.IsNullOrEmpty(assetPath)); Assert.IsFalse(string.IsNullOrEmpty(groupName)); Assert.IsFalse(string.IsNullOrEmpty(address)); Assert.IsTrue(_addressablesEditorAdapter.ExistsGroupByName(groupName)); var assetGuid = _assetDatabaseAdapter.AssetPathToGUID(assetPath); if (string.IsNullOrEmpty(assetGuid)) { throw new Exception($"Asset (Path:{assetPath}) is not found."); } var beforeGroupGuid = string.Empty; foreach (var g in _addressablesEditorAdapter.GetGroupInfos()) { if (_addressablesEditorAdapter.GetEntryInfos(g.Guid).Any(x => x.Guid.Equals(assetGuid))) { beforeGroupGuid = g.Guid; break; } } var afterGroup = _addressablesEditorAdapter.GetGroupInfoByName(groupName); _addressablesEditorAdapter.CreateOrMoveEntry(assetGuid, afterGroup.Guid); _addressablesEditorAdapter.UpdateEntry(assetGuid, address, labels); if (!string.IsNullOrEmpty(beforeGroupGuid)) { // Remove the before group if it is empty. if (removeBeforeGroupIfEmpty && _addressablesEditorAdapter.GetEntryInfos(beforeGroupGuid).Length == 0) { var groupInfo = _addressablesEditorAdapter.GetGroupInfo(beforeGroupGuid); _addressablesEditorAdapter.RemoveGroup(groupInfo.Guid); } } }
private void SetDefaultGroupTemplateIfNeeded() { if (string.IsNullOrEmpty(_setting.GroupTemplateGuid.Value) || string.IsNullOrEmpty(_assetDatabaseAdapter.GUIDToAssetPath(_setting.GroupTemplateGuid.Value))) { if (_addressableSettings.GroupTemplateObjects.Count == 0) { throw new InvalidOperationException( $"There is no valid {nameof(AddressableAssetGroupTemplate)} in {nameof(AddressableAssetSettings)}."); } var templateAsset = _addressableSettings.GroupTemplateObjects[0]; var templateAssetPath = _assetDatabaseAdapter.GetAssetPath(templateAsset); var templateAssetGuid = _assetDatabaseAdapter.AssetPathToGUID(templateAssetPath); _setting.SetGroupTemplateGuid(templateAssetGuid); } }