public void AssignAddressableInformation()
        {
            List <AssetItem> SerializedItems = UMAAssetIndexer.Instance.UpdateSerializedList();

            foreach (AssetItem ai in SerializedItems)
            {
                AddressableAssetEntry ae = AddressableUtility.GetAddressableAssetEntry(ai._Path);
                if (ae != null)
                {
                    ai.AddressableAddress = ae.address;
                    ai.IsAddressable      = true;
                    ai.AddressableGroup   = ae.parentGroup.Name;
                    ai._SerializedItem    = null;

                    ai.AddressableLabels = "";
                    foreach (string s in ae.labels)
                    {
                        ai.AddressableLabels += s + ";";
                    }
                }
                else
                {
                    ai.AddressableAddress = "";
                    ai.AddressableGroup   = "";
                    ai.IsAddressable      = false;
                    ai.AddressableLabels  = "";
                }
            }
        }
        /// <summary>
        /// Removes the assent entry, if it exists
        /// </summary>
        /// <param name="ai"></param>
        private void ClearAddressableAssetEntry(AssetItem ai)
        {
            AddressableAssetEntry ae = AddressableUtility.GetAddressableAssetEntry(ai._Path, out AddressableAssetGroup group);

            if (group != null)
            {
                group.RemoveAssetEntry(ae);
            }
        }
        public void AssignLabel(AssetItem ai, string Label)
        {
            AddressableAssetEntry ae = AddressableUtility.GetAddressableAssetEntry(ai._Path);

            if (ae != null)
            {
                if (ae.labels.Contains(Label))
                {
                    return;
                }
                ae.SetLabel(Label, true, true, true);
            }
        }
        public bool AddRecipeGroup(UMATextRecipe recipe)
        {
            List <AssetItem> items = UMAAssetIndexer.Instance.GetAssetItems(recipe, true);

            List <AssetItem> UniqueItems = new List <AssetItem>();

            foreach (AssetItem ai in items)
            {
                if (ai.IsAddressable)
                {
                    AddressableAssetEntry ae = AddressableUtility.GetAddressableAssetEntry(ai._Path);
                    if (ae != null && ae.parentGroup.Name == SharedGroupName)
                    {
                        continue;
                    }
                    UniqueItems.Add(ai);
                }
            }

            if (UniqueItems.Count == 0)
            {
                return(false);
            }

            // create the group.
            // add the non-unique items to the group
            // Set the addressable stuff;
            AddressableAssetGroup theGroup = AddressableUtility.AddressableSettings.FindGroup(recipe.name);

            if (theGroup != null)
            {
                AddressableUtility.AddressableSettings.RemoveGroup(theGroup);
            }
            theGroup = AddressableUtility.AddressableSettings.CreateGroup(recipe.name, false, false, true, AddressableUtility.AddressableSettings.DefaultGroup.Schemas);
            theGroup.GetSchema <BundledAssetGroupSchema>().BundleMode = BundledAssetGroupSchema.BundlePackingMode.PackTogether;

            foreach (AssetItem ai in UniqueItems)
            {
                ai.AddressableAddress = ""; // let the system assign it.
                ai.IsAddressable      = true;
                ai.AddressableGroup   = recipe.name;
                ai._SerializedItem    = null;
                ai.AddressableLabels  = recipe.AssignedLabel;

                AddAssetItemToGroup(theGroup, ai, recipe.name, recipe.AssignedLabel);
#if INCL_TEXTURES
                if (IsOverlayItem(ai))
                {
                    OverlayDataAsset od = ai.Item as OverlayDataAsset;
                    if (od == null)
                    {
                        continue;
                    }

                    foreach (Texture tex in od.textureList)
                    {
                        if (tex == null)
                        {
                            continue;
                        }
                        if (tex as Texture2D == null)
                        {
                            continue;
                        }

                        string Address = "Texture2D-" + tex.name + "-" + tex.GetInstanceID();

                        bool found = AssetDatabase.TryGetGUIDAndLocalFileIdentifier(tex.GetInstanceID(), out string texGUID, out long texlocalID);
                        if (found)
                        {
                            AddItemToGroup(theGroup, tex, Address, recipe.AssignedLabel);
                        }
                    }
                }
#endif
            }
            return(true);
        }