internal static bool ConvertEntryCollectionToEntries(AddressableAssetEntryCollection collection, AddressableAssetSettings settings)
        {
            if (settings == null)
            {
                settings = AddressableAssetSettingsDefaultObject.Settings;
            }
            if (settings == null || !AssetDatabase.TryGetGUIDAndLocalFileIdentifier(collection, out var collectionGuid, out long localId))
            {
                return(false);
            }

            var collectionEntry = settings.FindAssetEntry(collectionGuid, true);

            var group = collectionEntry == null ? settings.DefaultGroup : collectionEntry.parentGroup;
            List <AddressableAssetEntry> entries = new List <AddressableAssetEntry>();

            foreach (AddressableAssetEntry assetEntry in collection.Entries)
            {
                if (assetEntry == null)
                {
                    continue;
                }
                var entry = settings.FindAssetEntry(assetEntry.guid);
                if (entry != null)
                {
                    continue;
                }
                entries.Add(assetEntry);
            }

            HashSet <string> collectionLabels = new HashSet <string>();

            if (collectionEntry != null)
            {
                collectionLabels = collectionEntry.labels;
                if (!settings.RemoveAssetEntry(collectionEntry))
                {
                    return(false);
                }
            }

            foreach (AddressableAssetEntry entry in entries)
            {
                var newEntry = settings.CreateOrMoveEntry(entry.guid, group);
                newEntry.SetAddress(entry.address);
                foreach (string label in collectionLabels)
                {
                    newEntry.SetLabel(label, true);
                }
                foreach (string label in entry.labels)
                {
                    newEntry.SetLabel(label, true);
                }
            }

            return(true);
        }
Esempio n. 2
0
    private void CreateMissionSceneInternal(MissionEnum missionEnum)
    {
        string folderName = MissionSceneManager.Instance.GenerateFolderName(missionEnum);
        string sceneName  = MissionSceneManager.Instance.GenerateSceneName(missionEnum);
        bool   isConfirm  = EditorUtility.DisplayDialog("Create New Scene", "New scene file will be create.\nScene Name: " + sceneName + "\nLocation: data/graphics/World/" + folderName, "Ok, create it", "Cancel");

        if (isConfirm)
        {
            CreateMissionFolder(folderName);

            bool isExistMissionScene = MissionSceneManager.Instance.IsFileMissionSceneExistInAssets(folderName, sceneName);
            if (!isExistMissionScene)
            {
                Scene newScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive);
                newScene.name = sceneName;
                string fullScenePath = MissionSceneManager.Instance.GenerateFullScenePath(folderName, sceneName);

                bool saveOK = EditorSceneManager.SaveScene(newScene, fullScenePath);
                UnityEditor.AddressableAssets.Settings.AddressableAssetSettings settings = AddressableAssetSettingsDefaultObject.GetSettings(false);

                //Make a gameobject an addressable
                AddressableAssetGroup missionSceneGroup = settings.FindGroup("MissionScene");
                string guid = AssetDatabase.AssetPathToGUID(fullScenePath);

                //This is the function that actually makes the object addressable
                var entry = settings.CreateOrMoveEntry(guid, missionSceneGroup ? missionSceneGroup : settings.DefaultGroup);
                entry.address = sceneName;

                //You'll need these to run to save the changes!
                settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entry, true);
                AssetDatabase.SaveAssets();

                if (!saveOK)
                {
                    Debug.LogError("Save is faild. Scene:" + sceneName);
                }
                else
                {
                    SetCurrentScene(newScene);
                    EdtorSceneAutomaticOperatioin.UpdateSceneBuildSetting();
                }
            }
            else
            {
                EditorUtility.DisplayDialog("Scene Conflict", "Scene file Already Exist, Please load this scene.\nScene Name: " + sceneName + "\nLocation: data/graphics/World" + folderName, "Ok");
            }
        }
    }
        static internal bool CheckForNewEntry(ref string assetName, AddressableAssetSettings aaSettings, string guid, string checkToForceAddressable)
        {
            var entry = aaSettings.FindAssetEntry(guid);

            if (entry != null)
            {
                assetName = entry.address;
            }
            else
            {
                var path = AssetDatabase.GUIDToAssetPath(guid);
                if (!string.IsNullOrEmpty(path))
                {
                    if (!aaSettings.IsAssetPathInAddressableDirectory(path, out assetName))
                    {
                        assetName = path;
                        if (!string.IsNullOrEmpty(checkToForceAddressable))
                        {
                            var newEntry = aaSettings.CreateOrMoveEntry(guid, aaSettings.DefaultGroup);
                            Addressables.LogFormat("Created AddressableAsset {0} in group {1}.", newEntry.address, aaSettings.DefaultGroup.Name);
                        }
                        else
                        {
                            if (!File.Exists(path))
                            {
                                assetName = "Missing File!";
                            }
                            else
                            {
                                return(true);
                            }
                        }
                    }
                }
                else
                {
                    assetName = "Missing File!";
                }
            }

            return(false);
        }