Esempio n. 1
0
        /// <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();
            }
        }
Esempio n. 2
0
        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);
            }
        }