From d20004238d04e7f20d68f3d8968aeb600520113f Mon Sep 17 00:00:00 2001 From: Michal Pikulski Date: Sun, 7 Sep 2025 12:36:35 +0200 Subject: [PATCH] [Bootstrap] First go at Addressables bootsrapped objects --- Assets/AddressableAssetsData.meta | 8 + .../AddressableAssetSettings.asset | 116 ++++++++++ .../AddressableAssetSettings.asset.meta | 8 + .../AssetGroupTemplates.meta | 8 + .../AssetGroupTemplates/Packed Assets.asset | 78 +++++++ .../Packed Assets.asset.meta | 8 + Assets/AddressableAssetsData/AssetGroups.meta | 8 + .../AssetGroups/CustomBoot_Editor.asset | 28 +++ .../AssetGroups/CustomBoot_Editor.asset.meta | 8 + .../AssetGroups/CustomBoot_Runtime.asset | 28 +++ .../AssetGroups/CustomBoot_Runtime.asset.meta | 8 + .../AssetGroups/Default Local Group.asset | 23 ++ .../Default Local Group.asset.meta | 8 + .../AssetGroups/Schemas.meta | 8 + ...mBoot_Editor_BundledAssetGroupSchema.asset | 47 ++++ ..._Editor_BundledAssetGroupSchema.asset.meta | 8 + ...Boot_Editor_ContentUpdateGroupSchema.asset | 16 ++ ...Editor_ContentUpdateGroupSchema.asset.meta | 8 + ...Boot_Runtime_BundledAssetGroupSchema.asset | 47 ++++ ...Runtime_BundledAssetGroupSchema.asset.meta | 8 + ...oot_Runtime_ContentUpdateGroupSchema.asset | 16 ++ ...untime_ContentUpdateGroupSchema.asset.meta | 8 + ... Local Group_BundledAssetGroupSchema.asset | 47 ++++ ...l Group_BundledAssetGroupSchema.asset.meta | 8 + ...Local Group_ContentUpdateGroupSchema.asset | 16 ++ ... Group_ContentUpdateGroupSchema.asset.meta | 8 + .../AddressableAssetsData/DataBuilders.meta | 8 + .../DataBuilders/BuildScriptFastMode.asset | 20 ++ .../BuildScriptFastMode.asset.meta | 8 + .../DataBuilders/BuildScriptPackedMode.asset | 20 ++ .../BuildScriptPackedMode.asset.meta | 8 + .../BuildScriptPackedPlayMode.asset | 20 ++ .../BuildScriptPackedPlayMode.asset.meta | 8 + .../AddressableAssetsData/DefaultObject.asset | 15 ++ .../DefaultObject.asset.meta | 8 + Assets/Data/Bootstrap.meta | 8 + Assets/Data/Bootstrap/Editor.meta | 8 + .../Editor/CustomBootSettings_Editor.asset | 15 ++ .../CustomBootSettings_Editor.asset.meta | 8 + Assets/Data/Bootstrap/Runtime.meta | 8 + .../Runtime/CustomBootSettings_Runtime.asset | 15 ++ .../CustomBootSettings_Runtime.asset.meta | 8 + Assets/Data/Settings/DefaultSettings.asset | 2 +- Assets/Editor/Bootstrap.meta | 3 + .../Editor/Bootstrap/CustomBootEditorUtils.cs | 216 +++++++++++++++++ .../Bootstrap/CustomBootEditorUtils.cs.meta | 3 + .../Bootstrap/CustomBootProjectSettings.cs | 21 ++ .../CustomBootProjectSettings.cs.meta | 3 + .../Bootstrap/CustomBootSettingsProvider.cs | 131 +++++++++++ .../CustomBootSettingsProvider.cs.meta | 3 + .../Bootstrap/CustomBootSettingsUtil.cs | 218 ++++++++++++++++++ .../Bootstrap/CustomBootSettingsUtil.cs.meta | 3 + Assets/Editor/StyleSheets.meta | 3 + .../Editor/StyleSheets/CustomBootStyles.uss | 9 + .../StyleSheets/CustomBootStyles.uss.meta | 3 + .../Script/Editor/RopeEditor.cs | 2 +- Assets/Scripts/Bootstrap.meta | 3 + Assets/Scripts/Bootstrap/CustomBoot.cs | 181 +++++++++++++++ Assets/Scripts/Bootstrap/CustomBoot.cs.meta | 3 + .../Scripts/Bootstrap/CustomBootSettings.cs | 100 ++++++++ .../Bootstrap/CustomBootSettings.cs.meta | 3 + Packages/manifest.json | 2 + Packages/packages-lock.json | 45 +++- ProjectSettings/CustomBoot.asset | 26 +++ ProjectSettings/EditorBuildSettings.asset | 1 + 65 files changed, 1748 insertions(+), 3 deletions(-) create mode 100644 Assets/AddressableAssetsData.meta create mode 100644 Assets/AddressableAssetsData/AddressableAssetSettings.asset create mode 100644 Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates.meta create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset create mode 100644 Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset create mode 100644 Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset create mode 100644 Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta create mode 100644 Assets/AddressableAssetsData/DefaultObject.asset create mode 100644 Assets/AddressableAssetsData/DefaultObject.asset.meta create mode 100644 Assets/Data/Bootstrap.meta create mode 100644 Assets/Data/Bootstrap/Editor.meta create mode 100644 Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset create mode 100644 Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset.meta create mode 100644 Assets/Data/Bootstrap/Runtime.meta create mode 100644 Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset create mode 100644 Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset.meta create mode 100644 Assets/Editor/Bootstrap.meta create mode 100644 Assets/Editor/Bootstrap/CustomBootEditorUtils.cs create mode 100644 Assets/Editor/Bootstrap/CustomBootEditorUtils.cs.meta create mode 100644 Assets/Editor/Bootstrap/CustomBootProjectSettings.cs create mode 100644 Assets/Editor/Bootstrap/CustomBootProjectSettings.cs.meta create mode 100644 Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs create mode 100644 Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs.meta create mode 100644 Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs create mode 100644 Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs.meta create mode 100644 Assets/Editor/StyleSheets.meta create mode 100644 Assets/Editor/StyleSheets/CustomBootStyles.uss create mode 100644 Assets/Editor/StyleSheets/CustomBootStyles.uss.meta create mode 100644 Assets/Scripts/Bootstrap.meta create mode 100644 Assets/Scripts/Bootstrap/CustomBoot.cs create mode 100644 Assets/Scripts/Bootstrap/CustomBoot.cs.meta create mode 100644 Assets/Scripts/Bootstrap/CustomBootSettings.cs create mode 100644 Assets/Scripts/Bootstrap/CustomBootSettings.cs.meta create mode 100644 ProjectSettings/CustomBoot.asset diff --git a/Assets/AddressableAssetsData.meta b/Assets/AddressableAssetsData.meta new file mode 100644 index 00000000..cee6a1de --- /dev/null +++ b/Assets/AddressableAssetsData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 200f4ef149cfcdd4aa613fdb7c963812 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset new file mode 100644 index 00000000..08b0cb33 --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -0,0 +1,116 @@ +%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: 468a46d0ae32c3544b7d98094e6448a9, type: 3} + m_Name: AddressableAssetSettings + m_EditorClassIdentifier: + m_DefaultGroup: 6f3207429a65b3e4b83935ac19791077 + m_currentHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_OptimizeCatalogSize: 0 + m_BuildRemoteCatalog: 0 + m_CatalogRequestsTimeout: 0 + m_DisableCatalogUpdateOnStart: 0 + m_InternalIdNamingMode: 0 + m_InternalBundleIdMode: 1 + m_AssetLoadMode: 0 + m_BundledAssetProviderType: + m_AssemblyName: + m_ClassName: + m_AssetBundleProviderType: + m_AssemblyName: + m_ClassName: + m_IgnoreUnsupportedFilesInBuild: 0 + m_UniqueBundleIds: 0 + m_EnableJsonCatalog: 0 + m_NonRecursiveBuilding: 1 + m_CCDEnabled: 0 + m_maxConcurrentWebRequests: 3 + m_UseUWRForLocalBundles: 0 + m_BundleTimeout: 0 + m_BundleRetryCount: 0 + m_BundleRedirectLimit: -1 + m_SharedBundleSettings: 0 + m_SharedBundleSettingsCustomGroupIndex: 0 + m_ContiguousBundles: 1 + m_StripUnityVersionFromBundleBuild: 0 + m_DisableVisibleSubAssetRepresentations: 0 + m_BuiltInBundleNaming: 0 + mBuiltInBundleCustomNaming: + m_MonoScriptBundleNaming: 0 + m_CheckForContentUpdateRestrictionsOption: 0 + m_MonoScriptBundleCustomNaming: + m_RemoteCatalogBuildPath: + m_Id: + m_RemoteCatalogLoadPath: + m_Id: + m_ContentStateBuildPathProfileVariableName: + m_CustomContentStateBuildPath: + m_ContentStateBuildPath: + m_BuildAddressablesWithPlayerBuild: 0 + m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' + m_GroupAssets: + - {fileID: 11400000, guid: efe7e1728e73e9546ac5dfee2eff524f, type: 2} + - {fileID: 11400000, guid: 6e4927e7e19eef34b93dc2baa9e9e8e2, type: 2} + - {fileID: 11400000, guid: 7fcc03e584505ed4381983b6ebb1179d, type: 2} + m_BuildSettings: + m_LogResourceManagerExceptions: 1 + m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles + m_ProfileSettings: + m_Profiles: + - m_InheritedParent: + m_Id: 231dc51041f2c424899243324453fd26 + m_ProfileName: Default + m_Values: + - m_Id: 080115b099a6a8e45bf3d657a5f2acc8 + m_Value: + - m_Id: 4e476461d74a85c4fbdbe641a8c8ea63 + m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]' + - m_Id: 88323bf0b2ef98446961cedd6232bd47 + m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' + - m_Id: c258e2bcd3e8ac742ba98f152c0e6322 + m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]' + - m_Id: d386d965be5b6864493d081c0b44f916 + m_Value: 'ServerData/[BuildTarget]' + m_ProfileEntryNames: + - m_Id: 080115b099a6a8e45bf3d657a5f2acc8 + m_Name: Remote.LoadPath + m_InlineUsage: 0 + - m_Id: 4e476461d74a85c4fbdbe641a8c8ea63 + m_Name: BuildTarget + m_InlineUsage: 0 + - m_Id: 88323bf0b2ef98446961cedd6232bd47 + m_Name: Local.LoadPath + m_InlineUsage: 0 + - m_Id: c258e2bcd3e8ac742ba98f152c0e6322 + m_Name: Local.BuildPath + m_InlineUsage: 0 + - m_Id: d386d965be5b6864493d081c0b44f916 + m_Name: Remote.BuildPath + m_InlineUsage: 0 + m_ProfileVersion: 1 + m_LabelTable: + m_LabelNames: + - default + m_SchemaTemplates: [] + m_GroupTemplateObjects: + - {fileID: 11400000, guid: ea0a5135f5495eb4693a23d94617fe92, type: 2} + m_InitializationObjects: [] + m_CertificateHandlerType: + m_AssemblyName: + m_ClassName: + m_ActivePlayerDataBuilderIndex: 2 + m_DataBuilders: + - {fileID: 11400000, guid: 24c8bb7fb3e787b488bb7bc8c98894a5, type: 2} + - {fileID: 11400000, guid: ddb5be98fa60e1e428bbcc012df42eaf, type: 2} + - {fileID: 11400000, guid: 311e9fcab9aaf5147a450fcd5c63b6b7, type: 2} + m_ActiveProfileId: 231dc51041f2c424899243324453fd26 diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta new file mode 100644 index 00000000..d02082ec --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11da9bb90d9dd5848b4f7629415a6937 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates.meta b/Assets/AddressableAssetsData/AssetGroupTemplates.meta new file mode 100644 index 00000000..304ed19e --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cbdd8a3f0f6b51408f8a5b85ad682a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset new file mode 100644 index 00000000..f3686193 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8218240370353640469 +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 +--- !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: Packed Assets + m_EditorClassIdentifier: + m_SchemaObjects: + - {fileID: 1021885711071950473} + - {fileID: -8218240370353640469} + m_Description: Pack assets into asset bundles. + m_Settings: {fileID: 11400000, guid: 11da9bb90d9dd5848b4f7629415a6937, type: 2} +--- !u!114 &1021885711071950473 +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: + m_ClassName: + 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: 0 + m_BuildPath: + m_Id: + m_LoadPath: + m_Id: + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: + m_ClassName: + m_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta new file mode 100644 index 00000000..f7db8710 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea0a5135f5495eb4693a23d94617fe92 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups.meta b/Assets/AddressableAssetsData/AssetGroups.meta new file mode 100644 index 00000000..0a660384 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85c3237dce544fe46a5cd53666f7b69d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset new file mode 100644 index 00000000..8e896c62 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset @@ -0,0 +1,28 @@ +%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: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: CustomBoot_Editor + m_EditorClassIdentifier: + m_GroupName: CustomBoot_Editor + m_GUID: eb8a37153d819c44194f7ce97570a3d3 + m_SerializeEntries: + - m_GUID: 5dba96293096e16419f32d83116c830a + m_Address: CustomBootSettings_Editor + m_ReadOnly: 1 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 11da9bb90d9dd5848b4f7629415a6937, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: c03cc7ecaa19a7a40b438e05b1d5a25a, type: 2} + - {fileID: 11400000, guid: fb7e1e17d5d566a46897bb2781c274df, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset.meta b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset.meta new file mode 100644 index 00000000..cc40a3b5 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Editor.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fcc03e584505ed4381983b6ebb1179d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset new file mode 100644 index 00000000..405e661d --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset @@ -0,0 +1,28 @@ +%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: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: CustomBoot_Runtime + m_EditorClassIdentifier: + m_GroupName: CustomBoot_Runtime + m_GUID: 2b3d7cefec0915e42be04aebf0400a56 + m_SerializeEntries: + - m_GUID: 87c2b0f93ccbf5e44ab9545c6a6e0a30 + m_Address: CustomBootSettings_Runtime + m_ReadOnly: 0 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 11da9bb90d9dd5848b4f7629415a6937, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: 54df76b00cd0a934b81d6281e108ca72, type: 2} + - {fileID: 11400000, guid: 800c3aefd258544428e741376d15f603, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset.meta b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset.meta new file mode 100644 index 00000000..a52e4221 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/CustomBoot_Runtime.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: efe7e1728e73e9546ac5dfee2eff524f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset new file mode 100644 index 00000000..c94410e0 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset @@ -0,0 +1,23 @@ +%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: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: Default Local Group + m_EditorClassIdentifier: + m_GroupName: Default Local Group + m_GUID: 6f3207429a65b3e4b83935ac19791077 + m_SerializeEntries: [] + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: 11da9bb90d9dd5848b4f7629415a6937, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: 1a35037765940e748ac0ff60a7f21908, type: 2} + - {fileID: 11400000, guid: 92c701584db72e34fb4f96ff2c315771, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta new file mode 100644 index 00000000..26d88fd5 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e4927e7e19eef34b93dc2baa9e9e8e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta new file mode 100644 index 00000000..a1ffd446 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 198ac392d7a29d1468b7397c72b05cd7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset new file mode 100644 index 00000000..ed0c5780 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset @@ -0,0 +1,47 @@ +%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: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: CustomBoot_Editor_BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 7fcc03e584505ed4381983b6ebb1179d, type: 2} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 0 + 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: 0 + m_BuildPath: + m_Id: c258e2bcd3e8ac742ba98f152c0e6322 + m_LoadPath: + m_Id: 88323bf0b2ef98446961cedd6232bd47 + 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_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset.meta new file mode 100644 index 00000000..6aa9be41 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c03cc7ecaa19a7a40b438e05b1d5a25a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset new file mode 100644 index 00000000..76975263 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%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: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: CustomBoot_Editor_ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 7fcc03e584505ed4381983b6ebb1179d, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 00000000..853c694d --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Editor_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb7e1e17d5d566a46897bb2781c274df +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset new file mode 100644 index 00000000..0eb65307 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset @@ -0,0 +1,47 @@ +%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: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: CustomBoot_Runtime_BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: efe7e1728e73e9546ac5dfee2eff524f, type: 2} + 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: 0 + m_BuildPath: + m_Id: c258e2bcd3e8ac742ba98f152c0e6322 + m_LoadPath: + m_Id: 88323bf0b2ef98446961cedd6232bd47 + 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_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset.meta new file mode 100644 index 00000000..5e55438c --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54df76b00cd0a934b81d6281e108ca72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset new file mode 100644 index 00000000..b7ed6e41 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%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: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: CustomBoot_Runtime_ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: efe7e1728e73e9546ac5dfee2eff524f, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 00000000..d2c84cf2 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/CustomBoot_Runtime_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 800c3aefd258544428e741376d15f603 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset new file mode 100644 index 00000000..48a7fe66 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset @@ -0,0 +1,47 @@ +%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: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: Default Local Group_BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 6e4927e7e19eef34b93dc2baa9e9e8e2, type: 2} + 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: 0 + m_BuildPath: + m_Id: c258e2bcd3e8ac742ba98f152c0e6322 + m_LoadPath: + m_Id: 88323bf0b2ef98446961cedd6232bd47 + 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_UseDefaultSchemaSettings: 0 + m_SelectedPathPairIndex: 0 + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta new file mode 100644 index 00000000..9145f28e --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a35037765940e748ac0ff60a7f21908 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset new file mode 100644 index 00000000..f3606260 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%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: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: Default Local Group_ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 6e4927e7e19eef34b93dc2baa9e9e8e2, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 00000000..0fcc5f19 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92c701584db72e34fb4f96ff2c315771 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders.meta b/Assets/AddressableAssetsData/DataBuilders.meta new file mode 100644 index 00000000..e213050b --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16a2d6cd73e9fd7489bbbbc08e25a52e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset new file mode 100644 index 00000000..50d30dc5 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset @@ -0,0 +1,20 @@ +%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: 88d21199f5d473f4db36845f2318f180, type: 3} + m_Name: BuildScriptFastMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta new file mode 100644 index 00000000..7d0f9cf3 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24c8bb7fb3e787b488bb7bc8c98894a5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset new file mode 100644 index 00000000..ec875f94 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset @@ -0,0 +1,20 @@ +%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: 3e2e0ffa088c91d41a086d0b8cb16bdc, type: 3} + m_Name: BuildScriptPackedMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta new file mode 100644 index 00000000..808d0094 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 311e9fcab9aaf5147a450fcd5c63b6b7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset new file mode 100644 index 00000000..76288451 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset @@ -0,0 +1,20 @@ +%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: ad8c280d42ee0ed41a27db23b43dd2bf, type: 3} + m_Name: BuildScriptPackedPlayMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta new file mode 100644 index 00000000..4863cc74 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ddb5be98fa60e1e428bbcc012df42eaf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DefaultObject.asset b/Assets/AddressableAssetsData/DefaultObject.asset new file mode 100644 index 00000000..1d3d45b3 --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset @@ -0,0 +1,15 @@ +%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: 3a189bb168d8d90478a09ea08c2f3d72, type: 3} + m_Name: DefaultObject + m_EditorClassIdentifier: + m_AddressableAssetSettingsGuid: 11da9bb90d9dd5848b4f7629415a6937 diff --git a/Assets/AddressableAssetsData/DefaultObject.asset.meta b/Assets/AddressableAssetsData/DefaultObject.asset.meta new file mode 100644 index 00000000..4d500d0c --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae6ab785ade6a78439b79df6808becd2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Bootstrap.meta b/Assets/Data/Bootstrap.meta new file mode 100644 index 00000000..d2aa094c --- /dev/null +++ b/Assets/Data/Bootstrap.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7719b20dc923944419dbb4cebe0c782a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Bootstrap/Editor.meta b/Assets/Data/Bootstrap/Editor.meta new file mode 100644 index 00000000..1a4efe97 --- /dev/null +++ b/Assets/Data/Bootstrap/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47948b9d6cab6a14ead9d422a5630428 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset b/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset new file mode 100644 index 00000000..5b6f0c5b --- /dev/null +++ b/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset @@ -0,0 +1,15 @@ +%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: 6b4618adec17468d8064d6088ef8e38b, type: 3} + m_Name: CustomBootSettings_Editor + m_EditorClassIdentifier: + BootPrefabs: [] diff --git a/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset.meta b/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset.meta new file mode 100644 index 00000000..9ee24fb6 --- /dev/null +++ b/Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dba96293096e16419f32d83116c830a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Bootstrap/Runtime.meta b/Assets/Data/Bootstrap/Runtime.meta new file mode 100644 index 00000000..73228bff --- /dev/null +++ b/Assets/Data/Bootstrap/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17c063be58b92514da656cc599c574b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset b/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset new file mode 100644 index 00000000..701d0d72 --- /dev/null +++ b/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset @@ -0,0 +1,15 @@ +%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: 6b4618adec17468d8064d6088ef8e38b, type: 3} + m_Name: CustomBootSettings_Runtime + m_EditorClassIdentifier: + BootPrefabs: [] diff --git a/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset.meta b/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset.meta new file mode 100644 index 00000000..2eda8f0a --- /dev/null +++ b/Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87c2b0f93ccbf5e44ab9545c6a6e0a30 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Settings/DefaultSettings.asset b/Assets/Data/Settings/DefaultSettings.asset index 45b117e3..35f04607 100644 --- a/Assets/Data/Settings/DefaultSettings.asset +++ b/Assets/Data/Settings/DefaultSettings.asset @@ -22,7 +22,7 @@ MonoBehaviour: moveSpeed: 20 stopDistance: 0.1 useRigidbody: 1 - defaultHoldMovementMode: 1 + defaultHoldMovementMode: 0 followUpdateInterval: 0.1 followerSpeedMultiplier: 1.2 heldIconDisplayHeight: 2 diff --git a/Assets/Editor/Bootstrap.meta b/Assets/Editor/Bootstrap.meta new file mode 100644 index 00000000..5d91b7af --- /dev/null +++ b/Assets/Editor/Bootstrap.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fb064b88d8b44c5e8829bde51b976bb7 +timeCreated: 1757238427 \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs b/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs new file mode 100644 index 00000000..e3fadb51 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs @@ -0,0 +1,216 @@ +using Bootstrap; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Editor.Bootstrap +{ + /// + /// Edit-mode utilities. + /// + /// This class provides a handy mechanism to enable editor bootstrapping. + /// When enabled, the bootstrap system will initialise during edit-mode, allowing + /// developers to preview the effects of the bootstrap system. + /// + /// There are several caveats here: + /// 1. DontDestroyOnLoad doesn't work in edit-mode. Any objects loaded by the bootstrap system + /// will be added to the current scene. + /// 2. Entering playmode will cause this script to de-initialise the bootstrapper, if initialised. + /// This means that playmode priority is always given to the boostrapper. + /// 3. If editor bootstrapping is enabled, then the bootstrapper will de-init and re-init + /// whenever the current scene changes. This may not be appropriate for all workflows! + /// 4. If bootstrapping is enabled, and the current scene is saved, then the bootstrapper will be + /// de-initialised prior to the scene being saved to disk, and then re-initialised, thereby + /// avoiding scene pollution. + /// + [InitializeOnLoad] + public static class CustomBootEditorUtils + { + /// + /// Editor prefs key for the edit-mode bootstrapper. + /// + private const string INITIALISE_IN_EDITOR = "bootstrap.editor_init_enabled"; + + /// + /// Menu path for the edit-mode bootstrapper + /// + private const string EDITOR_INIT_MENU = "Bootstrap/Editor Initialise"; + + static CustomBootEditorUtils() + { + InitPlayModeListener(); + + if (Application.isPlaying) return; + + //Don't initialise if we're about to change playmode! + if (EditorInitialisationEnabled && !EditorApplication.isPlayingOrWillChangePlaymode) + { + DoInit(); + } + } + + /// + /// Initialise the playmode change listener. + /// This also sets up a listener for scene saving, so that we can + /// de-init and reinit the bootstrapper when the user saves changes, thereby + /// avoiding bootstrapped objects polluting the saved scene. + /// + private static void InitPlayModeListener() + { + EditorApplication.playModeStateChanged += EditorApplicationOnplayModeStateChanged; + EditorSceneManager.sceneSaving += OnSceneSaving; + } + + /// + /// Handle the event. + /// This de-initialises the bootstrapper, removing objects from the scene, + /// and then listens for the event + /// in order to re-initialise the bootstrapper. + /// + /// + /// + private static void OnSceneSaving(Scene scene, string path) + { + if (CustomBoot.Initialised) + { + DoDeInit(); + EditorSceneManager.sceneSaved += EditorSceneManagerOnsceneSaved; + + void EditorSceneManagerOnsceneSaved(Scene scene1) + { + EditorSceneManager.sceneSaved -= EditorSceneManagerOnsceneSaved; + CheckInit(); + } + } + } + + /// + /// Deinitialise the playmode change listener + /// + private static void DeInitPlayModeListener() + { + EditorApplication.playModeStateChanged -= EditorApplicationOnplayModeStateChanged; + } + + /// + /// Is play-mode bootstrapping enabled? + /// + private static bool EditorInitialisationEnabled + { + get => EditorPrefs.GetBool(INITIALISE_IN_EDITOR, false); + set => EditorPrefs.SetBool(INITIALISE_IN_EDITOR, value); + } + + + /// + /// Menu handler for the edit-mode bootstrapper + /// + [MenuItem(EDITOR_INIT_MENU)] + private static void EditorInitialise() + { + EditorInitialisationEnabled = !EditorInitialisationEnabled; + CheckInit(); + } + + /// + /// Menu validator for the edit-mode bootstrapper + /// + /// + [MenuItem(EDITOR_INIT_MENU, true)] + private static bool EditorInitialiseValidate() + { + Menu.SetChecked(EDITOR_INIT_MENU, EditorPrefs.GetBool(INITIALISE_IN_EDITOR, false)); + return true; + } + + /// + /// Perform initialisation or de-initialisation depending on the current context + /// + private static void CheckInit() + { + if (EditorInitialisationEnabled && !CustomBoot.Initialised && !Application.isPlaying) + { + DoInit(); + } + else if (CustomBoot.Initialised) + { + DoDeInit(); + } + } + + /// + /// Perform the initialisation process. + /// This adds a listener for the event so that we + /// can handle scene changes once we're initialised + /// + private static void DoInit() + { + EditorSceneManager.sceneClosing += OnSceneClosing; + CustomBoot.PerformInitialisation(); + } + + /// + /// Handle the event + /// This de-initialises the bootstrapper and then sets up a listener for the + /// event so that + /// we can safely re-initialise the bootstrapper + /// + /// + /// + private static void OnSceneClosing(Scene scene, bool removingscene) + { + if (!Application.isPlaying && CustomBoot.Initialised) + { + DoDeInit(); + EditorSceneManager.activeSceneChangedInEditMode += OnSceneLoaded; + } + } + + /// + /// Handles the event, + /// allowing the boostrapper to reinitialise if required + /// + /// + /// + private static void OnSceneLoaded(Scene arg0, Scene scene) + { + if (!Application.isPlaying) + { + EditorSceneManager.activeSceneChangedInEditMode -= OnSceneLoaded; + CheckInit(); + } + } + + /// + /// De-Initialises the bootstrapper + /// + private static void DoDeInit() + { + CustomBoot.PerformDeInitialisation(); + EditorSceneManager.sceneClosing -= OnSceneClosing; + } + + + /// + /// Handles playmode change events. This will de-initialise the bootstrapper + /// when exiting edit-mode, and call when entering edit-mode + /// + /// + private static void EditorApplicationOnplayModeStateChanged(PlayModeStateChange obj) + { + switch (obj) + { + case PlayModeStateChange.ExitingEditMode: + if (CustomBoot.Initialised) + { + DoDeInit(); + } + break; + case PlayModeStateChange.EnteredEditMode: + CheckInit(); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs.meta b/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs.meta new file mode 100644 index 00000000..b2f62b5d --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootEditorUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f2e29f8987f24903ac5e99d8c1b4f003 +timeCreated: 1731265444 \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs b/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs new file mode 100644 index 00000000..c42f9cb3 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace Editor.Bootstrap +{ + /// + /// A scriptable object used to store references to CustomBoot settings for both Runtime and Editor. + /// + public class CustomBootProjectSettings : ScriptableObject + { + /// + /// The Addressables reference for the runtime settings + /// + public AssetReference RuntimeSettings; + + /// + /// The Addressables reference for the editor settings + /// + public AssetReference EditorSettings; + } +} \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs.meta b/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs.meta new file mode 100644 index 00000000..58a40e47 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootProjectSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 96f303d5dfe74b3ea131e7c7de54901a +timeCreated: 1724178591 \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs b/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs new file mode 100644 index 00000000..4d5f3a44 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using Bootstrap; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.UIElements; + +namespace Editor.Bootstrap +{ + /// + /// Settings provider for the custom boot behaviour + /// + public class CustomBootSettingsProvider : SettingsProvider + { + /// + /// Internal reference to the serialized boot settings object + /// + private SerializedObject customBootSettings; + + + private CustomBootSettingsProvider(string path, SettingsScope scopes = SettingsScope.Project, IEnumerable keywords = null) : base(path, scopes, keywords) + { + } + + /// + /// Initialise the UI for the settings provider + /// + /// + /// + public override void OnActivate(string searchContext, VisualElement rootElement) + { + customBootSettings = CustomBootSettingsUtil.GetSerializedSettings(); + + var styleSheet = AssetDatabase.LoadAssetAtPath("Assets/Editor/StyleSheets/CustomBootStyles.uss"); + rootElement.styleSheets.Add(styleSheet); + rootElement.AddToClassList("settings"); + var title = new Label() + { + text = "Custom Boot" + }; + title.AddToClassList("title"); + rootElement.Add(title); + + var properties = new VisualElement() + { + style = + { + flexDirection = FlexDirection.Column + } + }; + properties.AddToClassList("property-list"); + + var runtimeProp = customBootSettings.FindProperty(nameof(CustomBootProjectSettings.RuntimeSettings)); + var editorProp = customBootSettings.FindProperty(nameof(CustomBootProjectSettings.EditorSettings)); + + properties.Add(CreateBootSettingsEditor(runtimeProp)); + properties.Add(CreateBootSettingsEditor(editorProp)); + rootElement.Add(properties); + + rootElement.Bind(customBootSettings); + } + + /// + /// Draw an editor for the CustomBootSettings object associated with the given property + /// + /// + /// + private static VisualElement CreateBootSettingsEditor(SerializedProperty property) + { + var bootSettingsObject = new SerializedObject(AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath((property.boxedValue as AssetReference).AssetGUID))); + var propertyEditorContainer = new VisualElement(); + DrawObject(propertyEditorContainer, bootSettingsObject); + return propertyEditorContainer; + } + + /// + /// Generic SerializedObject property editor + /// + /// + /// + private static void DrawObject(VisualElement container, SerializedObject o) + { + var l = new Label(o.targetObject.name); + container.Add(l); + var f = GetVisibleSerializedFields(o.targetObject.GetType()); + foreach (var field in f) + { + var prop = o.FindProperty(field.Name); + var pField = new PropertyField(prop); + container.Add(pField); + } + container.Bind(o); + } + + /// + /// Retrieve all accessible serialised fields for the given type + /// + /// + /// + private static FieldInfo[] GetVisibleSerializedFields(Type T) + { + var publicFields = T.GetFields(BindingFlags.Instance | BindingFlags.Public); + var infoFields = publicFields.Where(t => t.GetCustomAttribute() == null).ToList(); + + var privateFields = T.GetFields(BindingFlags.Instance | BindingFlags.NonPublic); + infoFields.AddRange(privateFields.Where(t => t.GetCustomAttribute() != null)); + + return infoFields.ToArray(); + } + + /// + /// Create the Settings Provider. Internally, this will ensure the settings object is created. + /// + /// + [SettingsProvider] + public static SettingsProvider CreateCustomBootSettingsProvider() + { + if (!CustomBootSettingsUtil.IsSettingsAvailable()) + { + CustomBootSettingsUtil.GetOrCreateSettings(); + } + + var provider = new CustomBootSettingsProvider("Project/Custom Boot", SettingsScope.Project); + return provider; + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs.meta b/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs.meta new file mode 100644 index 00000000..a86a40c0 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootSettingsProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 41cc0ad6a6e04eb4b9ebe5107f00f8b3 +timeCreated: 1724007531 \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs b/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs new file mode 100644 index 00000000..ed20ac59 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs @@ -0,0 +1,218 @@ +using System.IO; +using System.Linq; +using Bootstrap; +using UnityEditor; +using UnityEditor.AddressableAssets; +using UnityEditor.AddressableAssets.Settings; +using UnityEditor.AddressableAssets.Settings.GroupSchemas; +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace Editor.Bootstrap +{ + /// + /// Helper methods for CustomBoot configuration + /// + public class CustomBootSettingsUtil + { + /// + /// Path to the ProjectSettings file + /// + private const string PROJECT_SETTINGS_PATH = "ProjectSettings/CustomBoot.asset"; + + /// + /// Path to the runtime custom boot settings file + /// + private const string RUNTIME_CUSTOM_BOOT_SETTINGS_PATH = + "Assets/Data/Bootstrap/Runtime/CustomBootSettings_Runtime.asset"; + + /// + /// Path to the editor custom boot settings file + /// + private const string EDITOR_CUSTOM_BOOT_SETTINGS_PATH = + "Assets/Data/Bootstrap/Editor/CustomBootSettings_Editor.asset"; + + /// + /// Determine whether the settings asset file is available + /// + /// + internal static bool IsSettingsAvailable() + { + return File.Exists(PROJECT_SETTINGS_PATH); + } + + + /// + /// Retrieve the settings object if it exists, otherwise create and return it. + /// + /// + internal static CustomBootProjectSettings GetOrCreateSettings() + { + CustomBootProjectSettings projectSettings; + + //Check whether the settings file already exists + if (IsSettingsAvailable()) + { + //If it exists, load it + projectSettings = InternalEditorUtility.LoadSerializedFileAndForget(PROJECT_SETTINGS_PATH).First() as + CustomBootProjectSettings; + } + else + { + //If it doesn't exist, create a new ScriptableObject + projectSettings = ScriptableObject.CreateInstance(); + + //Configure the settings file + CreateBootSettingsAssets(out var runtimeEntry, out var editorEntry); + projectSettings.RuntimeSettings = new AssetReference(runtimeEntry.guid); + projectSettings.EditorSettings = new AssetReference(editorEntry.guid); + + //And save it! + InternalEditorUtility.SaveToSerializedFileAndForget(new Object[] { projectSettings }, + PROJECT_SETTINGS_PATH, true); + } + + //Finally, return our settings object + return projectSettings; + } + + /// + /// Create the Runtime and Editor CustomBootSettings assets. + /// + /// + /// + private static void CreateBootSettingsAssets(out AddressableAssetEntry runtimeEntry, + out AddressableAssetEntry editorEntry) + { + //Create two assets representing our boot configurations + var runtimeSettings = + GetOrCreateBootSettingsAsset(RUNTIME_CUSTOM_BOOT_SETTINGS_PATH, out var runtimeCreated); + var editorSettings = GetOrCreateBootSettingsAsset(EDITOR_CUSTOM_BOOT_SETTINGS_PATH, out var editorCreated); + + //Save the AssetDatabase state if either asset is new + if (runtimeCreated || editorCreated) + { + AssetDatabase.SaveAssets(); + } + + //Configure the Addressables system with the new assets. + AddSettingsToAddressables(runtimeSettings, editorSettings, out runtimeEntry, out editorEntry); + } + + /// + /// Load, or create, a CustomBootSettings asset at the given path + /// + /// + /// + /// + private static CustomBootSettings GetOrCreateBootSettingsAsset(string path, out bool wasCreated) + { + var settings = AssetDatabase.LoadAssetAtPath(path); + if (!settings) + { + //Make sure full path is created + var dirPath = Path.GetDirectoryName(path); + if (!Directory.Exists(dirPath)) + { + Directory.CreateDirectory(dirPath); + AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); + } + + settings = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(settings, path); + wasCreated = true; + } + else + { + wasCreated = false; + } + + return settings; + } + + /// + /// Add the CustomBootSettings asset to the relevant Addressables groups. + /// + /// + /// + /// + /// + private static void AddSettingsToAddressables(CustomBootSettings runtimeSettings, + CustomBootSettings editorSettings, out AddressableAssetEntry runtimeEntry, + out AddressableAssetEntry editorEntry) + { + InitialiseAddressableGroups(out var runtimeGroup, out var editorGroup); + runtimeEntry = + CreateCustomBootSettingsEntry(runtimeSettings, runtimeGroup, $"{nameof(CustomBootSettings)}_Runtime"); + editorEntry = + CreateCustomBootSettingsEntry(editorSettings, editorGroup, $"{nameof(CustomBootSettings)}_Editor"); + AssetDatabase.SaveAssets(); + } + + /// + /// Create an Addressables entry for the given CustomBootSettings object, and add it to the given group. + /// + /// + /// + /// + /// + private static AddressableAssetEntry CreateCustomBootSettingsEntry(CustomBootSettings bootSettings, + AddressableAssetGroup group, string key) + { + var settings = AddressableAssetSettingsDefaultObject.Settings; + var entry = settings.CreateOrMoveEntry( + AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(bootSettings)), + group); + entry.address = key; + settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryMoved, entry, true); + return entry; + } + + /// + /// Ensure the Runtime and Editor Addressables groups exist + /// + /// + /// + private static void InitialiseAddressableGroups(out AddressableAssetGroup runtimeGroup, + out AddressableAssetGroup editorGroup) + { + runtimeGroup = GetOrCreateGroup($"{nameof(CustomBoot)}_Runtime", true); + editorGroup = GetOrCreateGroup($"{nameof(CustomBoot)}_Editor", false); + } + + /// + /// Retrieve or create an Addressables group. + /// + /// + /// + /// + private static AddressableAssetGroup GetOrCreateGroup(string name, bool includeInBuild) + { + // Use GetSettings(true) to ensure the settings asset is created if missing + var settings = AddressableAssetSettingsDefaultObject.GetSettings(true); + if (settings == null) + { + Debug.LogError("AddressableAssetSettings could not be found or created. Please ensure Addressables are set up in your project."); + return null; + } + var group = settings.FindGroup(name); + if (group == null) + { + group = settings.CreateGroup(name, false, false, true, settings.DefaultGroup.Schemas); + group.GetSchema().IncludeInBuild = includeInBuild; + } + + return group; + } + + /// + /// Retrieve the serialised representation of the settings object + /// + /// + internal static SerializedObject GetSerializedSettings() + { + return new SerializedObject(GetOrCreateSettings()); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs.meta b/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs.meta new file mode 100644 index 00000000..72a865f5 --- /dev/null +++ b/Assets/Editor/Bootstrap/CustomBootSettingsUtil.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05fc3698d2694614882942c0c41db065 +timeCreated: 1724010512 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets.meta b/Assets/Editor/StyleSheets.meta new file mode 100644 index 00000000..c08f8a89 --- /dev/null +++ b/Assets/Editor/StyleSheets.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1defa1690a6b4cedb690c43f8183206a +timeCreated: 1757241205 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/CustomBootStyles.uss b/Assets/Editor/StyleSheets/CustomBootStyles.uss new file mode 100644 index 00000000..e32a152c --- /dev/null +++ b/Assets/Editor/StyleSheets/CustomBootStyles.uss @@ -0,0 +1,9 @@ +.settings { + padding: 12px; +} + +.title { + font-size: 180%; + -unity-font-style: bold; + margin-bottom: 10px; +} diff --git a/Assets/Editor/StyleSheets/CustomBootStyles.uss.meta b/Assets/Editor/StyleSheets/CustomBootStyles.uss.meta new file mode 100644 index 00000000..cdbadfdd --- /dev/null +++ b/Assets/Editor/StyleSheets/CustomBootStyles.uss.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 979e3e0635064936a720875d59139fdd +timeCreated: 1757241206 \ No newline at end of file diff --git a/Assets/External/OptimizedRopesAndCables/Script/Editor/RopeEditor.cs b/Assets/External/OptimizedRopesAndCables/Script/Editor/RopeEditor.cs index bf708d6b..fff6a248 100644 --- a/Assets/External/OptimizedRopesAndCables/Script/Editor/RopeEditor.cs +++ b/Assets/External/OptimizedRopesAndCables/Script/Editor/RopeEditor.cs @@ -4,7 +4,7 @@ using UnityEditor; namespace GogoGaga.OptimizedRopesAndCables { [CustomEditor(typeof(Rope))] - public class RopeEditor : Editor + public class RopeEditor : UnityEditor.Editor { private Rope component; private SerializedProperty startPoint; diff --git a/Assets/Scripts/Bootstrap.meta b/Assets/Scripts/Bootstrap.meta new file mode 100644 index 00000000..d4c10b20 --- /dev/null +++ b/Assets/Scripts/Bootstrap.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 72153f2c39ad40deacd00c5caed75019 +timeCreated: 1757237591 \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBoot.cs b/Assets/Scripts/Bootstrap/CustomBoot.cs new file mode 100644 index 00000000..54b5eeb4 --- /dev/null +++ b/Assets/Scripts/Bootstrap/CustomBoot.cs @@ -0,0 +1,181 @@ +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; + +namespace Bootstrap +{ + /// + /// Entrypoint for the Custom Boot initialisation + /// + public static class CustomBoot + { + /// + /// Current initialisation status + /// + public static bool Initialised { get; private set; } + + /// + // Called as soon as the game begins + /// + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)] + private static void Initialise() + { + //We should always clean up after Addressables, so let's take care of that immediately + Application.quitting += ApplicationOnUnloading; + + PerformInitialisation(); + } + + /// + /// Initialise the bootstrapper + /// + public static void PerformInitialisation() + { + //In editor, perform initialisation synchronously + if (Application.isEditor) + { + InitialiseBootSettingsSync(); + } + else + { + //In builds, just run things asynchronously, since we can add any checks we need early on + _ = InitialiseBootSettings(); + } + } + + + /// + /// Called as the game is quitting, allowing for cleanup + /// + private static void ApplicationOnUnloading() + { + Application.quitting -= ApplicationOnUnloading; + PerformDeInitialisation(); + } + + /// + /// De-Initialise the bootstrapper + /// + public static void PerformDeInitialisation() + { + Cleanup(runtimeBootSettingsHandle); + Cleanup(editorBootSettingsHandle); + Initialised = false; + } + + + /// + /// Initialise the boot settings asynchronously + /// + private static async Task InitialiseBootSettings() + { + await LoadCustomBootSettings(); + Initialised = true; + } + + /// + /// Initialise the boot settings synchronously + /// + private static void InitialiseBootSettingsSync() + { + LoadCustomBootSettingsSync(); + Initialised = true; + } + + + /// + /// Clean up the boot settings + /// + /// + private static void Cleanup(AsyncOperationHandle handle) + { + if (handle.IsValid()) + { + handle.Result.Cleanup(); + Addressables.Release(handle); + } + } + + /// + /// Async handle for the runtime custom boot settings scriptable object + /// + private static AsyncOperationHandle runtimeBootSettingsHandle; + + /// + /// Async handle for the editor custom boot settings object + /// + private static AsyncOperationHandle editorBootSettingsHandle; + + /// + /// Runtime addressable key + /// + private static string RuntimeAsset = $"{nameof(CustomBootSettings)}_Runtime"; + + /// + /// Editor addressable key + /// + private static string EditorAsset = $"{nameof(CustomBootSettings)}_Editor"; + + /// + /// Load the custom boot settings asynchronously and run the initialisation method + /// + private static async Task LoadCustomBootSettings() + { + if (Application.isEditor) + { + editorBootSettingsHandle = await InitialiseBootSettingsAsset(EditorAsset); + } + + runtimeBootSettingsHandle = await InitialiseBootSettingsAsset(RuntimeAsset); + } + + /// + /// Load the custom boot settings synchronously and run the initialisation method + /// + private static void LoadCustomBootSettingsSync() + { + if (Application.isEditor) + { + editorBootSettingsHandle = InitialiseBootSettingsAssetSync(EditorAsset); + } + + runtimeBootSettingsHandle = InitialiseBootSettingsAssetSync(RuntimeAsset); + } + + /// + /// Initialise the boot settings asset with the given key + /// + /// + /// + private static async Task> InitialiseBootSettingsAsset(string key) + { + var handle = Addressables.LoadAssetAsync(key); + await handle.Task; + switch (handle.Status) + { + case AsyncOperationStatus.Failed: + Debug.LogError(handle.OperationException); + break; + case AsyncOperationStatus.Succeeded: + await handle.Result.Initialise(); + break; + } + + return handle; + } + + /// + /// Initialise the boot settings asset with the given key synchronously + /// + /// + /// + private static AsyncOperationHandle InitialiseBootSettingsAssetSync(string key) + { + var handle = Addressables.LoadAssetAsync(key); + var result = handle.WaitForCompletion(); + result.InitialiseSync(); + return handle; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBoot.cs.meta b/Assets/Scripts/Bootstrap/CustomBoot.cs.meta new file mode 100644 index 00000000..922998f7 --- /dev/null +++ b/Assets/Scripts/Bootstrap/CustomBoot.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8b562285bf55436dbf0dd87e3abcee2a +timeCreated: 1724007283 \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBootSettings.cs b/Assets/Scripts/Bootstrap/CustomBootSettings.cs new file mode 100644 index 00000000..ffd2293f --- /dev/null +++ b/Assets/Scripts/Bootstrap/CustomBootSettings.cs @@ -0,0 +1,100 @@ +using System.Threading.Tasks; +using UnityEngine; + +namespace Bootstrap +{ + /// + /// Settings for the custom boot process + /// + public class CustomBootSettings : ScriptableObject + { + /// + /// A list of prefabs which should be loaded during boot + /// + public GameObject[] BootPrefabs; + + /// + /// Internal references to instances of the prefabs from + /// + private GameObject[] Instances; + + /// + /// Runtime container object which acts as the parent for any BootPrefab instances + /// + private GameObject RuntimeContainer; + + /// + /// Initialise the boot settings object asynchronously, loading each prefab in + /// + public async Task Initialise() + { + RuntimeContainer = new GameObject($"{name}_Container"); + DontDestroyOnLoad(RuntimeContainer); + Instances = new GameObject[BootPrefabs.Length]; + for (var i = 0; i < BootPrefabs.Length; i++) + { + if (!BootPrefabs[i]) continue; + + var instance = GameObject.InstantiateAsync(BootPrefabs[i], RuntimeContainer.transform); + while (!instance.isDone) + await Task.Yield(); + + Instances[i] = instance.Result[0]; + } + } + + /// + /// Initialise the boot settings object synchronously, loading each prefab in + /// + public void InitialiseSync() + { + RuntimeContainer = new GameObject($"{name}_Container"); + if (Application.isPlaying) + { + DontDestroyOnLoad(RuntimeContainer); + } + + Instances = new GameObject[BootPrefabs.Length]; + for (var i = 0; i < BootPrefabs.Length; i++) + { + if (!BootPrefabs[i]) continue; + + var instance = GameObject.Instantiate(BootPrefabs[i], RuntimeContainer.transform); + Instances[i] = instance; + } + } + + /// + /// Destroy all loaded instances referenced by + /// + public void Cleanup() + { + foreach (var t in Instances) + { + if (t) + { + if (Application.isPlaying) + { + GameObject.Destroy(t); + } + else + { + GameObject.DestroyImmediate(t); + } + + } + } + + Instances = null; + + if (Application.isPlaying) + { + GameObject.Destroy(RuntimeContainer); + } + else + { + GameObject.DestroyImmediate(RuntimeContainer); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Bootstrap/CustomBootSettings.cs.meta b/Assets/Scripts/Bootstrap/CustomBootSettings.cs.meta new file mode 100644 index 00000000..263b2233 --- /dev/null +++ b/Assets/Scripts/Bootstrap/CustomBootSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b4618adec17468d8064d6088ef8e38b +timeCreated: 1724007691 \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json index 61d4e896..591eefb3 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -2,6 +2,8 @@ "dependencies": { "com.unity.2d.sprite": "1.0.0", "com.unity.2d.spriteshape": "11.0.0", + "com.unity.addressables": "2.6.0", + "com.unity.addressables.android": "1.0.6", "com.unity.cinemachine": "3.1.4", "com.unity.feature.2d": "2.0.1", "com.unity.ide.rider": "3.0.36", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index c460baa4..ff8a8fbc 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -96,6 +96,32 @@ }, "url": "https://packages.unity.com" }, + "com.unity.addressables": { + "version": "2.6.0", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.profiling.core": "1.0.2", + "com.unity.test-framework": "1.4.5", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.scriptablebuildpipeline": "2.4.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.addressables.android": { + "version": "1.0.6", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.addressables": "2.3.16", + "com.unity.modules.androidjni": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.burst": { "version": "1.8.23", "depth": 2, @@ -189,6 +215,13 @@ "dependencies": {}, "url": "https://packages.unity.com" }, + "com.unity.profiling.core": { + "version": "1.0.2", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.render-pipelines.core": { "version": "17.1.0", "depth": 1, @@ -232,6 +265,16 @@ "com.unity.modules.terrain": "1.0.0" } }, + "com.unity.scriptablebuildpipeline": { + "version": "2.4.0", + "depth": 1, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.4.5", + "com.unity.modules.assetbundle": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.searcher": { "version": "4.9.3", "depth": 2, @@ -268,7 +311,7 @@ }, "com.unity.test-framework": { "version": "1.5.1", - "depth": 3, + "depth": 1, "source": "builtin", "dependencies": { "com.unity.ext.nunit": "2.0.3", diff --git a/ProjectSettings/CustomBoot.asset b/ProjectSettings/CustomBoot.asset new file mode 100644 index 00000000..cdf3bf66 --- /dev/null +++ b/ProjectSettings/CustomBoot.asset @@ -0,0 +1,26 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +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: 96f303d5dfe74b3ea131e7c7de54901a, type: 3} + m_Name: + m_EditorClassIdentifier: + RuntimeSettings: + m_AssetGUID: 87c2b0f93ccbf5e44ab9545c6a6e0a30 + m_SubObjectName: + m_SubObjectType: + m_SubObjectGUID: + m_EditorAssetChanged: 0 + EditorSettings: + m_AssetGUID: 5dba96293096e16419f32d83116c830a + m_SubObjectName: + m_SubObjectType: + m_SubObjectGUID: + m_EditorAssetChanged: 0 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 323d17a9..54339504 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -15,5 +15,6 @@ EditorBuildSettings: path: Assets/Scenes/Levels/Quarry.unity guid: 7826cd123499e704bbed784f37ffe300 m_configObjects: + com.unity.addressableassets: {fileID: 11400000, guid: ae6ab785ade6a78439b79df6808becd2, type: 2} com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3} m_UseUCBPForAssetBundles: 0