备份CatanBuilding瘦身独立工程

This commit is contained in:
JSD\13999
2026-05-26 16:15:54 +08:00
commit 2d0e6a61b7
12001 changed files with 2431925 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 04cd50d4709d67d46ae02a5c0d18c3cc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: Local
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: 2134600949886003966}
- {fileID: 5450088179071591902}
m_Description:
m_Settings: {fileID: 11400000, guid: 2b420ef1fd7d56b4f86537c540c40803, type: 2}
--- !u!114 &2134600949886003966
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 3
m_BuildPath:
m_Id: 0327ded4381668844bc353d399df10b1
m_LoadPath:
m_Id: d3edbf09e52e321458f036629aea31aa
m_BundleMode: 1
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &5450088179071591902
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2c6c3b7b5de17d944b1acc2c37cb1ace
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: LocalOneBundle
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: 2134600949886003966}
- {fileID: 5450088179071591902}
m_Description:
m_Settings: {fileID: 11400000, guid: 2b420ef1fd7d56b4f86537c540c40803, type: 2}
--- !u!114 &2134600949886003966
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 3
m_BuildPath:
m_Id: 0327ded4381668844bc353d399df10b1
m_LoadPath:
m_Id: d3edbf09e52e321458f036629aea31aa
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &5450088179071591902
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f35d7d498ee47f84cba264039cf1cfbe
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2495768021662990981
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 3
m_BuildPath:
m_Id: ce35249f4cedb0c4ea05a2b4547030d8
m_LoadPath:
m_Id: a0175be1cdc22bb48a6cec36df70320c
m_BundleMode: 1
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: RemoteSeparately
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: -2495768021662990981}
- {fileID: 1499562304012160075}
m_Description:
m_Settings: {fileID: 11400000, guid: 2b420ef1fd7d56b4f86537c540c40803, type: 2}
--- !u!114 &1499562304012160075
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d1116100ceb7a9246a9dfdbc4ab6c5ec
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2495768021662990981
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 3
m_BuildPath:
m_Id: ce35249f4cedb0c4ea05a2b4547030d8
m_LoadPath:
m_Id: a0175be1cdc22bb48a6cec36df70320c
m_BundleMode: 0
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: RemoteTogether
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: -2495768021662990981}
- {fileID: 1499562304012160075}
m_Description:
m_Settings: {fileID: 11400000, guid: 2b420ef1fd7d56b4f86537c540c40803, type: 2}
--- !u!114 &1499562304012160075
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 32e60196e37ee144896230d6223a6223
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,76 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-2495768021662990981
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3}
m_Name: BundledAssetGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_InternalBundleIdMode: 1
m_Compression: 1
m_IncludeAddressInCatalog: 1
m_IncludeGUIDInCatalog: 1
m_IncludeLabelsInCatalog: 1
m_InternalIdNamingMode: 0
m_CacheClearBehavior: 0
m_IncludeInBuild: 1
m_BundledAssetProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider
m_ForceUniqueProvider: 0
m_UseAssetBundleCache: 1
m_UseAssetBundleCrc: 1
m_UseAssetBundleCrcForCachedBundles: 1
m_UseUWRForLocalBundles: 0
m_Timeout: 0
m_ChunkedTransfer: 0
m_RedirectLimit: -1
m_RetryCount: 3
m_BuildPath:
m_Id: ce35249f4cedb0c4ea05a2b4547030d8
m_LoadPath:
m_Id: a0175be1cdc22bb48a6cec36df70320c
m_BundleMode: 2
m_AssetBundleProviderType:
m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider
m_BundleNaming: 0
m_AssetLoadMode: 0
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3}
m_Name: RemoteTogetherByLabel
m_EditorClassIdentifier:
m_SchemaObjects:
- {fileID: -2495768021662990981}
- {fileID: 1499562304012160075}
m_Description:
m_Settings: {fileID: 11400000, guid: 2b420ef1fd7d56b4f86537c540c40803, type: 2}
--- !u!114 &1499562304012160075
MonoBehaviour:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3}
m_Name: ContentUpdateGroupSchema
m_EditorClassIdentifier:
m_Group: {fileID: 0}
m_StaticContent: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4de1b4178aaf03b47bfed64c7b961b91
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0f305f6f93f647249a13dd0f537996b7
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,729 @@
using System;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEditor.AddressableAssets.Settings;
using UnityEngine;
using inspector.ext;
using UnityEditor.AddressableAssets.Settings.GroupSchemas;
using System.Collections.Generic;
using UnityEngine.AddressableAssets;
using System.Text.RegularExpressions;
namespace addressables.helper
{
[Serializable]
public class GroupDefine
{
public string name;
[inspector.ext.Folder]
public string folder;
public string folderPath => folder.ToFolderInfo().path;
public AddressableAssetGroupTemplate template;
public AssetLabelReference[] labels;
public void CopyToStreamingAssets()
{
var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var group = addrSettings.FindGroup(name);
var buildPath = group.Settings.RemoteCatalogBuildPath;
var schema = group.GetSchema<BundledAssetGroupSchema>();
if (schema != null)
{
if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackSeparately)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogether)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
return;
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogetherByLabel)
{
List<string> names = new List<string>();
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
if (names.Contains(bundleName))
{
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
names.Add(bundleName);
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
}
}
}
}
}
}
[Serializable]
public class GroupFolderDefine
{
public string name;
[inspector.ext.Folder]
public string folder;
public string folderPath => folder.ToFolderInfo().path;
public AddressableAssetGroupTemplate template;
public AssetLabelReference[] labels;
}
public class AddressableHelperSetting : ScriptableObject
{
public string[] MamualGroupNames;
public string[] MamualGroupNamePrefixs;
public GroupDefine[] GroupDefines;
public GroupFolderDefine[] GroupFolderDefines;
}
public class AddressableHelper
{
private const string helperSettingPath = "Assets/Settings/AddressableHelperSetting.asset";
public static bool IsSettingExists() => File.Exists(helperSettingPath);
[MenuItem("Window/Asset Management/Helper/Create Setting", true)]
static bool ValidateCreateSetting() => !IsSettingExists();
[MenuItem("Window/Asset Management/Helper/Create Setting")]
static void CreateSetting()
{
var instance = ScriptableObject.CreateInstance<AddressableHelperSetting>();
AssetDatabase.CreateAsset(instance, helperSettingPath);
}
//[MenuItem("Window/Asset Management/Helper/Sync Groups", true)]
//static bool ValidateSyncGroups() => IsSettingExists();
//[MenuItem("Window/Asset Management/Helper/Sync Groups &#F")]
public static void SyncGroups()
{
var helperSetting = AssetDatabase.LoadAssetAtPath<AddressableHelperSetting>(helperSettingPath);
var defines = helperSetting.GroupDefines;
var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var manualGroupNames = helperSetting.MamualGroupNames;
var MamualGroupNamePrefixs = helperSetting.MamualGroupNamePrefixs;
// Debug.Log($"[AddressableHelper] {addrSettings.groups.Select(x => x.Name)}");
var dbt = addrSettings.groups;
foreach (var x in dbt)
{
Debug.Log(x);
}
// Debug.Log($"[AddressableHelper] {addrSettings.groups.Select(x => x.Name).ToList()}");
var existsGroupNames = addrSettings.groups.Select(x => x.Name).ToList();
var newGroupNames = helperSetting.GroupDefines.Select(x => x.name)
.Concat(helperSetting.GroupFolderDefines.Select(x => x.name))
.ToList();
var allGroupNames = manualGroupNames.Concat(newGroupNames).ToList();
for(int i = 0; i < MamualGroupNamePrefixs.Length;i++)
{
var prefix = MamualGroupNamePrefixs[i];
if (string.IsNullOrEmpty(prefix))
continue;
var manualGroups = existsGroupNames.Where(x => x.StartsWith(prefix)).ToList();
if (manualGroups.Count > 0)
{
Debug.Log($"[AddressableHelper] add manual group {prefix}");
allGroupNames.AddRange(manualGroups);
}
}
// remove groups not defined in helper setting
for (int i = existsGroupNames.Count - 1; i >= 0; i--)
{
var group = existsGroupNames[i];
if (!allGroupNames.Contains(group))
{
Debug.Log($"[AddressableHelper] remove group {group}");
addrSettings.RemoveGroup(addrSettings.FindGroup(group));
existsGroupNames.RemoveAt(i);
}
}
foreach (var groupDefine in defines)
{
var groupName = groupDefine.name;
var group = addrSettings.FindGroup(groupName);
if (null == group)
{
Debug.Log($"[AddressableHelper] create group {groupDefine.name}");
group = CreateGroup(groupDefine, addrSettings);
groupDefine.template.ApplyToAddressableAssetGroup(group);
}
else
{
var entries = group.entries.ToList();
Debug.Log($"[AddressableHelper] clean group {groupDefine.name} {entries.Count}");
foreach (var entry in entries)
{
group.RemoveAssetEntry(entry);
}
}
Debug.Log($"[AddressableHelper] sync group {groupDefine.name}");
SyncEntries(groupDefine, group, addrSettings);
EditorUtility.SetDirty(group);
}
var folderDefines = helperSetting.GroupFolderDefines;
foreach (var folderDefine in folderDefines)
{
var groupName = folderDefine.name;
var group = addrSettings.FindGroup(groupName);
if (null == group)
{
Debug.Log($"[AddressableHelper] create group {folderDefine.name}");
group = CreateGroupByFolder(groupName, folderDefine, addrSettings);
folderDefine.template.ApplyToAddressableAssetGroup(group);
}
else
{
var entries = group.entries.ToList();
Debug.Log($"[AddressableHelper] clean group {folderDefine.name} {entries.Count}");
foreach (var entry in entries)
{
group.RemoveAssetEntry(entry);
}
}
Debug.Log($"[AddressableHelper] sync group {folderDefine.name}");
SyncEntriesByFolder(folderDefine, group, addrSettings);
EditorUtility.SetDirty(group);
}
EditorUtility.SetDirty(addrSettings);
AssetDatabase.SaveAssets();
}
private static AddressableAssetGroup CreateGroupByFolder(string groupName, GroupFolderDefine groupDefine, AddressableAssetSettings addrSettings)
{
var template = groupDefine.template;
var group = addrSettings.CreateGroup(groupName, false, false, true, null, template.GetTypes());
return group;
}
private static void SyncEntriesByFolder(GroupFolderDefine groupDefine, AddressableAssetGroup group, AddressableAssetSettings addrSettings)
{
var folder = new string[] { groupDefine.folderPath };
//获取文件夹下的所有文件夹
var assetsGUIDs = AssetDatabase.FindAssets("", folder);
var assetPaths = assetsGUIDs.Select(_ => AssetDatabase.GUIDToAssetPath(_)).ToArray();
var count = assetsGUIDs.Length;
Regex regexA = new Regex(groupDefine.folderPath + "/(.*?)/");
Regex regexB = new Regex(".*?/([^/]+)$");
for (int i = 0; i < count; i++)
{
var guid = assetsGUIDs[i];
var entry = group.GetAssetEntry(guid);
string address = Path.GetFileNameWithoutExtension(assetPaths[i]);
string folderName = Path.GetFileName(assetPaths[i]);
if (folderName.Contains("."))
{
if (entry == null || entry.address != address)
{
entry = addrSettings.CreateOrMoveEntry(guid, group);
entry.address = address;
//获取文件所在一级目录
string directoryPath = assetPaths[i];
//int startIndex = 1 + directoryPath.IndexOf(groupDefine.folderPath) + groupDefine.folderPath.Length;
//int endIndex = directoryPath.IndexOf("/", startIndex);
//directoryPath = directoryPath.Substring(startIndex, endIndex - startIndex);
//directoryPath = assetPaths[i];
Match match = regexA.Match(directoryPath);
if (match.Groups.Count > 1)
{
directoryPath = match.Groups[1].Value;
}
else
{
match = regexB.Match(groupDefine.folderPath);
directoryPath = match.Groups[1].Value;
}
entry.SetLabel(directoryPath, true, true);
for (int j = 0; j < groupDefine.labels.Length; j++)
{
if (!string.IsNullOrEmpty(groupDefine.labels[j].labelString))
{
entry.SetLabel(groupDefine.labels[j].labelString, true);
}
}
EditorUtility.SetDirty(group);
}
}
}
}
private static void SyncEntries(GroupDefine groupDefine, AddressableAssetGroup group, AddressableAssetSettings addrSettings)
{
var folder = new string[] { groupDefine.folderPath };
var assetsGUIDs = AssetDatabase.FindAssets("", folder);
var assetPaths = assetsGUIDs.Select(_ => AssetDatabase.GUIDToAssetPath(_)).ToArray();
var count = assetsGUIDs.Length;
for (int i = 0; i < count; i++)
{
if (Directory.Exists(assetPaths[i]))
continue;
var guid = assetsGUIDs[i];
var entry = group.GetAssetEntry(guid);
string address = Path.GetFileNameWithoutExtension(assetPaths[i]);
if (entry == null || entry.address != address)
{
entry = addrSettings.CreateOrMoveEntry(guid, group);
entry.address = address;
for (int j = 0; j < groupDefine.labels.Length; j++)
{
if (!string.IsNullOrEmpty(groupDefine.labels[j].labelString))
{
entry.SetLabel(groupDefine.labels[j].labelString, true);
}
}
EditorUtility.SetDirty(group);
}
}
}
private static AddressableAssetGroup CreateGroup(GroupDefine groupDefine, AddressableAssetSettings addrSettings)
{
var template = groupDefine.template;
var group = addrSettings.CreateGroup(groupDefine.name, false, false, true, null, template.GetTypes());
return group;
}
[MenuItem("Window/Asset Management/Helper/Clean StreamingAssets")]
public static void CleanStreamingAssets()
{
// delete all file with ext .bundle in StreamingAssets fold
string streamingAssetsPath = Application.streamingAssetsPath;
string[] bundleFiles = Directory.GetFiles(streamingAssetsPath, "*.bundle");
string[] bundleMetaFiles = Directory.GetFiles(streamingAssetsPath, "*.bundle.meta");
foreach (string bundleFile in bundleFiles)
{
File.Delete(bundleFile);
}
foreach (string metaFile in bundleMetaFiles)
{
File.Delete(metaFile);
}
AssetDatabase.Refresh();
}
[MenuItem("Window/Asset Management/Helper/Copy To StreamingAssets")]
public static void CopyToStreamingAssets()
{
//load helper setting
//var helperSetting = AssetDatabase.LoadAssetAtPath<AddressableHelperSetting>(helperSettingPath);
//foreach (var groupDefine in helperSetting.GroupDefines)
//{
// groupDefine.CopyToStreamingAssets();
//}
AddressableAssetSettings addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var groups = addrSettings.groups;
foreach (var group in groups)
{
if (group.Settings.BuildRemoteCatalog)
{
CopyToStreamingAssets(group, addrSettings);
}
}
AssetDatabase.Refresh();
}
private static void CopyToStreamingAssets(AddressableAssetGroup group, AddressableAssetSettings addrSettings)
{
var buildPath = group.Settings.RemoteCatalogBuildPath;
var schema = group.GetSchema<BundledAssetGroupSchema>();
if (schema != null)
{
if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackSeparately)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogether)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
return;
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogetherByLabel)
{
List<string> names = new List<string>();
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (string.IsNullOrEmpty(bundleName))
{
Debug.LogError($"{group.name} {entry.address}");
continue;
}
if (names.Contains(bundleName))
{
continue;
}
var bunldes = Directory.GetFiles(buildPath.GetValue(addrSettings), bundleName);
if (bunldes.Length != 1)
{
Debug.LogError($"{group.name} {entry.address} {bunldes.Length} {bundleName}");
continue;
}
names.Add(bundleName);
//copy bundle
var dest = Path.Combine(Application.streamingAssetsPath, Path.GetFileName(bunldes[0]));
File.Copy(bunldes[0], dest, true);
}
}
}
}
}
public static HashSet<string> GetPackFileNames()
{
var names = new HashSet<string>();
AddressableAssetSettings addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var groups = addrSettings.groups;
foreach (var group in groups)
{
if (group.Settings.BuildRemoteCatalog)
{
GetPackFileNames(group, addrSettings, names);
}
}
return names;
}
private static void GetPackFileNames(AddressableAssetGroup group, AddressableAssetSettings addrSettings, HashSet<string> names)
{
var buildPath = group.Settings.RemoteCatalogBuildPath;
var schema = group.GetSchema<BundledAssetGroupSchema>();
if (schema != null)
{
if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackSeparately)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
names.Add(bundleName);
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogether)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
names.Add(bundleName);
break;
}
}
}
else if (schema.BundleMode == BundledAssetGroupSchema.BundlePackingMode.PackTogetherByLabel)
{
foreach (var entry in group.entries)
{
if (entry.labels.Any(x => x == "pack"))
{
if (Directory.Exists(buildPath.GetValue(addrSettings)) == false)
{
Debug.LogError($"{group.name} {entry.address} {buildPath.GetValue(addrSettings)}");
continue;
}
string bundleName = Path.GetFileName(entry.BundleFileId);
if (names.Contains(bundleName))
{
continue;
}
names.Add(bundleName);
}
}
}
}
}
[MenuItem("Window/Asset Management/Helper/Copy All To StreamingAssets")]
public static void CopyALLToStreamingAssets()
{
var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var bundle_dir = addrSettings.RemoteCatalogBuildPath.GetValue(addrSettings);
var bunldes = Directory.GetFiles(bundle_dir, $"*.bundle");
foreach (var bunlde in bunldes)
{
File.Copy(bunlde, bunlde.Replace(bundle_dir, Application.streamingAssetsPath), true);
}
AssetDatabase.Refresh();
}
public static string ExportAssetsFile()
{
var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
var bundle_dir = addrSettings.RemoteCatalogBuildPath.GetValue(addrSettings);
var allFileNames = new HashSet<string>(Directory.GetFiles(bundle_dir, $"*.bundle").Select(p => Path.GetFileName(p)));
var packFileNanes = GetPackFileNames();
var downloadFileNames = allFileNames.Except(packFileNanes);
var bundles = new Dictionary<string, List<string>>();
bundles["pack"] = packFileNanes.ToList();
bundles["download"] = downloadFileNames.ToList();
return Newtonsoft.Json.JsonConvert.SerializeObject(bundles, Newtonsoft.Json.Formatting.Indented);
}
//public static void SyncGroups()
//{
//var helperSetting = AssetDatabase.LoadAssetAtPath<AddressableHelperSetting>(helperSettingPath);
//var defines = helperSetting.GroupDefines;
//var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
//foreach (var groupDefine in defines)
//{
//var groupName = groupDefine.name;
//var group = addrSettings.FindGroup(groupName);
//if (null == group)
//{
//group = CreateGroup(groupDefine, addrSettings);
//}
//groupDefine.template.ApplyToAddressableAssetGroup(group);
//SyncEntries(groupDefine, group, addrSettings);
//EditorUtility.SetDirty(addrSettings);
//AssetDatabase.SaveAssets();
//}
//var folderDefines = helperSetting.GroupFolderDefines;
//foreach (var folderDefine in folderDefines)
//{
//var groupName = folderDefine.name;
//var group = addrSettings.FindGroup(groupName);
//if (null == group)
//{
//group = CreateGroupByFolder(groupName, folderDefine, addrSettings);
//}
//folderDefine.template.ApplyToAddressableAssetGroup(group);
//SyncEntriesByFolder(folderDefine, group, addrSettings);
//EditorUtility.SetDirty(addrSettings);
//AssetDatabase.SaveAssets();
//}
//}
//[MenuItem("Window/Asset Management/Helper/Sync Groups PreloadOrPack", true)]
//static bool ValidateSyncGroupsPRLabel() => IsSettingExists();
//[MenuItem("Window/Asset Management/Helper/Sync Groups PreloadOrPack")]
//public static void SyncGroupsPRLabel()
//{
//var helperSetting = AssetDatabase.LoadAssetAtPath<AddressableHelperSetting>(helperSettingPath);
//var defines = helperSetting.GroupDefines;
//var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
//foreach (var groupDefine in defines)
//{
//var groupName = groupDefine.name;
//var group = addrSettings.FindGroup(groupName);
//if (null != group)
//{
//foreach (var item in groupDefine.labels)
//{
//group.entries.ToList().ForEach(x => x.SetLabel(item.labelString, true, true));
//}
//}
//}
//EditorUtility.SetDirty(addrSettings);
//AssetDatabase.SaveAssets();
//}
//[MenuItem("Window/Asset Management/Helper/Sync Groups RewardLabel", true)]
//static bool ValidateSyncGroupsRewardLabel() => IsSettingExists();
//[MenuItem("Window/Asset Management/Helper/Sync Groups RewardLabel")]
//public static void SyncGroupsRewardLabel()
//{
//var helperSetting = AssetDatabase.LoadAssetAtPath<AddressableHelperSetting>(helperSettingPath);
//var defines = helperSetting.GroupDefines;
//var addrSettings = AddressableAssetSettingsDefaultObject.Settings;
//foreach (var groupDefine in defines)
//{
//var groupName = groupDefine.name;
//var group = addrSettings.FindGroup(groupName);
//if (null != group)
//{
//foreach (var item in groupDefine.rewardLabels)
//{
//group.entries.ToList().ForEach(x => x.SetLabel(item.labelString, false, true));
//}
//}
//}
//EditorUtility.SetDirty(addrSettings);
//AssetDatabase.SaveAssets();
//}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 218c59bf2d66c0c40b2118af7c5cdc61
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,20 @@
{
"name": "addressables.helper",
"rootNamespace": "addressables.helper",
"references": [
"Unity.Addressables.Editor",
"Unity.Addressables",
"inspector.extension"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ff1eccee924c22c468a32e5ed39e52ce
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,11 @@
{
"name": "com.addressable.helper",
"version": "0.0.1",
"displayName": "addressables helper",
"unity": "2020.3",
"unityRelease": "4f1",
"author": {
"name": "Skistua",
"email": "b166er.dada@gmail.com"
}
}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: aef2de6b51b58124689c45f28f861db0
PackageManifestImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: