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); }
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); }