init commit
						commit
						1bf6ce0f8f
					
				|  | @ -0,0 +1 @@ | ||||||
|  | .DS_Store | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1e668c30d2b5441319892df260a461c3 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 86f3aa8f033904d33b51791a596a13a2 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru.Editor | ||||||
|  | { | ||||||
|  |     using System.Collections; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using UnityEngine; | ||||||
|  | 
 | ||||||
|  |     public class GuruUIKitManager | ||||||
|  |     { | ||||||
|  |      | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 83dd96b84b388468cb4495456777eb88 | ||||||
|  | MonoImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   defaultReferences: [] | ||||||
|  |   executionOrder: 0 | ||||||
|  |   icon: {instanceID: 0} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 6ed3e7feb6b345509729043f53362200 | ||||||
|  | timeCreated: 1705375326 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 2c16a0b4ca94643b587f134ab177ebec | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 8e615bcd21ad42649f3a3d925930c77c | ||||||
|  | timeCreated: 1704872501 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: f8f09b88c50184ce0bccc2bd84a5dcb4 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: ce62a292e655c479ebcb55b0d2096d06 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Arial | ||||||
|  |   fallbackFontReferences: [] | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e3c521c1144fc43eca5ce0d6b6a49c1a | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 01108c44563ae463a890f962b34502b7 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,31 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: bf74045e2ab2f457891455b718ed77ba | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 688b4b07b213545a8b732406301800b4, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 3ef596c41d454424a985096955aae626, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 7ed78d5bd4a544e58b98ec83953e5972, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 17e515bef00ab406bb90433be24950b8, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: a670730b6abd2459cbe52e05e9c5959f, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: a670730b6abd2459cbe52e05e9c5959f | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,29 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 3ef596c41d454424a985096955aae626 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 688b4b07b213545a8b732406301800b4, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 17e515bef00ab406bb90433be24950b8, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: a670730b6abd2459cbe52e05e9c5959f, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 17e515bef00ab406bb90433be24950b8 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: a670730b6abd2459cbe52e05e9c5959f, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 688b4b07b213545a8b732406301800b4 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 17e515bef00ab406bb90433be24950b8, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: a670730b6abd2459cbe52e05e9c5959f, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e0747024c7d2c4bf281295de30056948 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 7ed78d5bd4a544e58b98ec83953e5972 | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 688b4b07b213545a8b732406301800b4, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 3ef596c41d454424a985096955aae626, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e43a0cf3f5283438fa24bb366b16432a, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 17e515bef00ab406bb90433be24950b8, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: a670730b6abd2459cbe52e05e9c5959f, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e43a0cf3f5283438fa24bb366b16432a | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Encode Sans Expanded | ||||||
|  |   fallbackFontReferences: | ||||||
|  |   - {fileID: 12800000, guid: 1b3d1f322cd5a4cb7b6da5df4dbcae91, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: e0747024c7d2c4bf281295de30056948, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: 01108c44563ae463a890f962b34502b7, type: 3} | ||||||
|  |   - {fileID: 12800000, guid: eb1c0f8b448344b4e9e78f1718855edf, type: 3} | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 44c47347adefa46c68f272e2d4e12e10 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,289 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!28 &-3218021044117043789 | ||||||
|  | Texture2D: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: EncodeSansExpanded-Bold Atlas | ||||||
|  |   m_ImageContentsHash: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     Hash: 00000000000000000000000000000000 | ||||||
|  |   m_ForcedFallbackFormat: 4 | ||||||
|  |   m_DownscaleFallback: 0 | ||||||
|  |   m_IsAlphaChannelOptional: 0 | ||||||
|  |   serializedVersion: 2 | ||||||
|  |   m_Width: 0 | ||||||
|  |   m_Height: 0 | ||||||
|  |   m_CompleteImageSize: 0 | ||||||
|  |   m_MipsStripped: 0 | ||||||
|  |   m_TextureFormat: 1 | ||||||
|  |   m_MipCount: 1 | ||||||
|  |   m_IsReadable: 1 | ||||||
|  |   m_IsPreProcessed: 0 | ||||||
|  |   m_IgnoreMasterTextureLimit: 0 | ||||||
|  |   m_StreamingMipmaps: 0 | ||||||
|  |   m_StreamingMipmapsPriority: 0 | ||||||
|  |   m_VTOnly: 0 | ||||||
|  |   m_AlphaIsTransparency: 0 | ||||||
|  |   m_ImageCount: 1 | ||||||
|  |   m_TextureDimension: 2 | ||||||
|  |   m_TextureSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_FilterMode: 1 | ||||||
|  |     m_Aniso: 1 | ||||||
|  |     m_MipBias: 0 | ||||||
|  |     m_WrapU: 0 | ||||||
|  |     m_WrapV: 0 | ||||||
|  |     m_WrapW: 0 | ||||||
|  |   m_LightmapFormat: 0 | ||||||
|  |   m_ColorSpace: 0 | ||||||
|  |   m_PlatformBlob:  | ||||||
|  |   image data: 0 | ||||||
|  |   _typelessdata:  | ||||||
|  |   m_StreamData: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     offset: 0 | ||||||
|  |     size: 0 | ||||||
|  |     path:  | ||||||
|  | --- !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: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} | ||||||
|  |   m_Name: EncodeSansExpanded-Bold SDF | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   hashCode: -1095770185 | ||||||
|  |   material: {fileID: 0} | ||||||
|  |   materialHashCode: 138061367 | ||||||
|  |   m_Version: 1.1.0 | ||||||
|  |   m_SourceFontFileGUID: bf74045e2ab2f457891455b718ed77ba | ||||||
|  |   m_SourceFontFile_EditorRef: {fileID: 0} | ||||||
|  |   m_SourceFontFile: {fileID: 12800000, guid: bf74045e2ab2f457891455b718ed77ba, type: 3} | ||||||
|  |   m_AtlasPopulationMode: 1 | ||||||
|  |   m_FaceInfo: | ||||||
|  |     m_FaceIndex: 0 | ||||||
|  |     m_FamilyName: Encode Sans Expanded | ||||||
|  |     m_StyleName: Bold | ||||||
|  |     m_PointSize: 90 | ||||||
|  |     m_Scale: 1 | ||||||
|  |     m_UnitsPerEM: 0 | ||||||
|  |     m_LineHeight: 112.50001 | ||||||
|  |     m_AscentLine: 92.700005 | ||||||
|  |     m_CapLine: 67 | ||||||
|  |     m_MeanLine: 49 | ||||||
|  |     m_Baseline: 0 | ||||||
|  |     m_DescentLine: -19.800001 | ||||||
|  |     m_SuperscriptOffset: 92.700005 | ||||||
|  |     m_SuperscriptSize: 0.5 | ||||||
|  |     m_SubscriptOffset: -19.800001 | ||||||
|  |     m_SubscriptSize: 0.5 | ||||||
|  |     m_UnderlineOffset: -4.5 | ||||||
|  |     m_UnderlineThickness: 2.25 | ||||||
|  |     m_StrikethroughOffset: 19.6 | ||||||
|  |     m_StrikethroughThickness: 2.25 | ||||||
|  |     m_TabWidth: 26 | ||||||
|  |   m_GlyphTable: [] | ||||||
|  |   m_CharacterTable: [] | ||||||
|  |   m_AtlasTextures: | ||||||
|  |   - {fileID: -3218021044117043789} | ||||||
|  |   m_AtlasTextureIndex: 0 | ||||||
|  |   m_IsMultiAtlasTexturesEnabled: 0 | ||||||
|  |   m_ClearDynamicDataOnBuild: 1 | ||||||
|  |   m_UsedGlyphRects: [] | ||||||
|  |   m_FreeGlyphRects: | ||||||
|  |   - m_X: 0 | ||||||
|  |     m_Y: 0 | ||||||
|  |     m_Width: 1023 | ||||||
|  |     m_Height: 1023 | ||||||
|  |   m_fontInfo: | ||||||
|  |     Name:  | ||||||
|  |     PointSize: 0 | ||||||
|  |     Scale: 0 | ||||||
|  |     CharacterCount: 0 | ||||||
|  |     LineHeight: 0 | ||||||
|  |     Baseline: 0 | ||||||
|  |     Ascender: 0 | ||||||
|  |     CapHeight: 0 | ||||||
|  |     Descender: 0 | ||||||
|  |     CenterLine: 0 | ||||||
|  |     SuperscriptOffset: 0 | ||||||
|  |     SubscriptOffset: 0 | ||||||
|  |     SubSize: 0 | ||||||
|  |     Underline: 0 | ||||||
|  |     UnderlineThickness: 0 | ||||||
|  |     strikethrough: 0 | ||||||
|  |     strikethroughThickness: 0 | ||||||
|  |     TabWidth: 0 | ||||||
|  |     Padding: 0 | ||||||
|  |     AtlasWidth: 0 | ||||||
|  |     AtlasHeight: 0 | ||||||
|  |   atlas: {fileID: 0} | ||||||
|  |   m_AtlasWidth: 1024 | ||||||
|  |   m_AtlasHeight: 1024 | ||||||
|  |   m_AtlasPadding: 9 | ||||||
|  |   m_AtlasRenderMode: 4165 | ||||||
|  |   m_glyphInfoList: [] | ||||||
|  |   m_KerningTable: | ||||||
|  |     kerningPairs: [] | ||||||
|  |   m_FontFeatureTable: | ||||||
|  |     m_GlyphPairAdjustmentRecords: [] | ||||||
|  |   fallbackFontAssets: [] | ||||||
|  |   m_FallbackFontAssetTable: | ||||||
|  |   - {fileID: 11400000, guid: c76c74f50c1dd40fcb6cf1427679cb46, type: 2} | ||||||
|  |   m_CreationSettings: | ||||||
|  |     sourceFontFileName:  | ||||||
|  |     sourceFontFileGUID: bf74045e2ab2f457891455b718ed77ba | ||||||
|  |     pointSizeSamplingMode: 0 | ||||||
|  |     pointSize: 90 | ||||||
|  |     padding: 9 | ||||||
|  |     packingMode: 0 | ||||||
|  |     atlasWidth: 1024 | ||||||
|  |     atlasHeight: 1024 | ||||||
|  |     characterSetSelectionMode: 7 | ||||||
|  |     characterSequence:  | ||||||
|  |     referencedFontAssetGUID:  | ||||||
|  |     referencedTextAssetGUID:  | ||||||
|  |     fontStyle: 0 | ||||||
|  |     fontStyleModifier: 0 | ||||||
|  |     renderMode: 4165 | ||||||
|  |     includeFontFeatures: 0 | ||||||
|  |   m_FontWeightTable: | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   - regularTypeface: {fileID: 0} | ||||||
|  |     italicTypeface: {fileID: 0} | ||||||
|  |   fontWeights: [] | ||||||
|  |   normalStyle: 0 | ||||||
|  |   normalSpacingOffset: 0 | ||||||
|  |   boldStyle: 0.75 | ||||||
|  |   boldSpacing: 7 | ||||||
|  |   italicStyle: 35 | ||||||
|  |   tabSize: 10 | ||||||
|  | --- !u!21 &6524006377389618200 | ||||||
|  | Material: | ||||||
|  |   serializedVersion: 8 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: EncodeSansExpanded-Bold Atlas Material | ||||||
|  |   m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} | ||||||
|  |   m_ValidKeywords: [] | ||||||
|  |   m_InvalidKeywords: [] | ||||||
|  |   m_LightmapFlags: 4 | ||||||
|  |   m_EnableInstancingVariants: 0 | ||||||
|  |   m_DoubleSidedGI: 0 | ||||||
|  |   m_CustomRenderQueue: -1 | ||||||
|  |   stringTagMap: {} | ||||||
|  |   disabledShaderPasses: [] | ||||||
|  |   m_SavedProperties: | ||||||
|  |     serializedVersion: 3 | ||||||
|  |     m_TexEnvs: | ||||||
|  |     - _BumpMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _Cube: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _FaceTex: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _MainTex: | ||||||
|  |         m_Texture: {fileID: -3218021044117043789} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _OutlineTex: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     m_Ints: [] | ||||||
|  |     m_Floats: | ||||||
|  |     - _Ambient: 0.5 | ||||||
|  |     - _Bevel: 0.5 | ||||||
|  |     - _BevelClamp: 0 | ||||||
|  |     - _BevelOffset: 0 | ||||||
|  |     - _BevelRoundness: 0 | ||||||
|  |     - _BevelWidth: 0 | ||||||
|  |     - _BumpFace: 0 | ||||||
|  |     - _BumpOutline: 0 | ||||||
|  |     - _ColorMask: 15 | ||||||
|  |     - _CullMode: 0 | ||||||
|  |     - _Diffuse: 0.5 | ||||||
|  |     - _FaceDilate: 0 | ||||||
|  |     - _FaceUVSpeedX: 0 | ||||||
|  |     - _FaceUVSpeedY: 0 | ||||||
|  |     - _GlowInner: 0.05 | ||||||
|  |     - _GlowOffset: 0 | ||||||
|  |     - _GlowOuter: 0.05 | ||||||
|  |     - _GlowPower: 0.75 | ||||||
|  |     - _GradientScale: 10 | ||||||
|  |     - _LightAngle: 3.1416 | ||||||
|  |     - _MaskSoftnessX: 0 | ||||||
|  |     - _MaskSoftnessY: 0 | ||||||
|  |     - _OutlineSoftness: 0 | ||||||
|  |     - _OutlineUVSpeedX: 0 | ||||||
|  |     - _OutlineUVSpeedY: 0 | ||||||
|  |     - _OutlineWidth: 0 | ||||||
|  |     - _PerspectiveFilter: 0.875 | ||||||
|  |     - _Reflectivity: 10 | ||||||
|  |     - _ScaleRatioA: 0.9 | ||||||
|  |     - _ScaleRatioB: 0.73125 | ||||||
|  |     - _ScaleRatioC: 0.73125 | ||||||
|  |     - _ScaleX: 1 | ||||||
|  |     - _ScaleY: 1 | ||||||
|  |     - _ShaderFlags: 0 | ||||||
|  |     - _Sharpness: 0 | ||||||
|  |     - _SpecularPower: 2 | ||||||
|  |     - _Stencil: 0 | ||||||
|  |     - _StencilComp: 8 | ||||||
|  |     - _StencilOp: 0 | ||||||
|  |     - _StencilReadMask: 255 | ||||||
|  |     - _StencilWriteMask: 255 | ||||||
|  |     - _TextureHeight: 1024 | ||||||
|  |     - _TextureWidth: 1024 | ||||||
|  |     - _UnderlayDilate: 0 | ||||||
|  |     - _UnderlayOffsetX: 0 | ||||||
|  |     - _UnderlayOffsetY: 0 | ||||||
|  |     - _UnderlaySoftness: 0 | ||||||
|  |     - _VertexOffsetX: 0 | ||||||
|  |     - _VertexOffsetY: 0 | ||||||
|  |     - _WeightBold: 0.75 | ||||||
|  |     - _WeightNormal: 0 | ||||||
|  |     m_Colors: | ||||||
|  |     - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} | ||||||
|  |     - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} | ||||||
|  |     - _FaceColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} | ||||||
|  |     - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} | ||||||
|  |     - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} | ||||||
|  |   m_BuildTextureStacks: [] | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 14fe73bc5e31343c5bcdc67d1102883f | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 11400000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,107 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!21 &2100000 | ||||||
|  | Material: | ||||||
|  |   serializedVersion: 8 | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_Name: EncodeSansExpanded-Regular SDF Bold | ||||||
|  |   m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} | ||||||
|  |   m_ValidKeywords: [] | ||||||
|  |   m_InvalidKeywords: [] | ||||||
|  |   m_LightmapFlags: 4 | ||||||
|  |   m_EnableInstancingVariants: 0 | ||||||
|  |   m_DoubleSidedGI: 0 | ||||||
|  |   m_CustomRenderQueue: -1 | ||||||
|  |   stringTagMap: {} | ||||||
|  |   disabledShaderPasses: [] | ||||||
|  |   m_SavedProperties: | ||||||
|  |     serializedVersion: 3 | ||||||
|  |     m_TexEnvs: | ||||||
|  |     - _BumpMap: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _Cube: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _FaceTex: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _MainTex: | ||||||
|  |         m_Texture: {fileID: 7995524909903448683, guid: 69f41eb363a4c4caba72ecd2e9f113ea, type: 2} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     - _OutlineTex: | ||||||
|  |         m_Texture: {fileID: 0} | ||||||
|  |         m_Scale: {x: 1, y: 1} | ||||||
|  |         m_Offset: {x: 0, y: 0} | ||||||
|  |     m_Ints: [] | ||||||
|  |     m_Floats: | ||||||
|  |     - _Ambient: 0.5 | ||||||
|  |     - _Bevel: 0.5 | ||||||
|  |     - _BevelClamp: 0 | ||||||
|  |     - _BevelOffset: 0 | ||||||
|  |     - _BevelRoundness: 0 | ||||||
|  |     - _BevelWidth: 0 | ||||||
|  |     - _BumpFace: 0 | ||||||
|  |     - _BumpOutline: 0 | ||||||
|  |     - _ColorMask: 15 | ||||||
|  |     - _CullMode: 0 | ||||||
|  |     - _Diffuse: 0.5 | ||||||
|  |     - _FaceDilate: 0 | ||||||
|  |     - _FaceUVSpeedX: 0 | ||||||
|  |     - _FaceUVSpeedY: 0 | ||||||
|  |     - _GlowInner: 0.05 | ||||||
|  |     - _GlowOffset: 0 | ||||||
|  |     - _GlowOuter: 0.05 | ||||||
|  |     - _GlowPower: 0.75 | ||||||
|  |     - _GradientScale: 10 | ||||||
|  |     - _LightAngle: 3.1416 | ||||||
|  |     - _MaskSoftnessX: 0 | ||||||
|  |     - _MaskSoftnessY: 0 | ||||||
|  |     - _OutlineSoftness: 0 | ||||||
|  |     - _OutlineUVSpeedX: 0 | ||||||
|  |     - _OutlineUVSpeedY: 0 | ||||||
|  |     - _OutlineWidth: 0.24 | ||||||
|  |     - _PerspectiveFilter: 0.875 | ||||||
|  |     - _Reflectivity: 10 | ||||||
|  |     - _ScaleRatioA: 0.9 | ||||||
|  |     - _ScaleRatioB: 0.73125 | ||||||
|  |     - _ScaleRatioC: 0.73125 | ||||||
|  |     - _ScaleX: 1 | ||||||
|  |     - _ScaleY: 1 | ||||||
|  |     - _ShaderFlags: 0 | ||||||
|  |     - _Sharpness: 0 | ||||||
|  |     - _SpecularPower: 2 | ||||||
|  |     - _Stencil: 0 | ||||||
|  |     - _StencilComp: 8 | ||||||
|  |     - _StencilOp: 0 | ||||||
|  |     - _StencilReadMask: 255 | ||||||
|  |     - _StencilWriteMask: 255 | ||||||
|  |     - _TextureHeight: 1024 | ||||||
|  |     - _TextureWidth: 1024 | ||||||
|  |     - _UnderlayDilate: 0 | ||||||
|  |     - _UnderlayOffsetX: 0 | ||||||
|  |     - _UnderlayOffsetY: 0 | ||||||
|  |     - _UnderlaySoftness: 0 | ||||||
|  |     - _VertexOffsetX: 0 | ||||||
|  |     - _VertexOffsetY: 0 | ||||||
|  |     - _WeightBold: 0.75 | ||||||
|  |     - _WeightNormal: 0 | ||||||
|  |     m_Colors: | ||||||
|  |     - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} | ||||||
|  |     - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} | ||||||
|  |     - _FaceColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} | ||||||
|  |     - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} | ||||||
|  |     - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} | ||||||
|  |     - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |     - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} | ||||||
|  |   m_BuildTextureStacks: [] | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 8949210efd0774a09bf80311432874fa | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 2100000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 69f41eb363a4c4caba72ecd2e9f113ea | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 11400000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c76c74f50c1dd40fcb6cf1427679cb46 | ||||||
|  | NativeFormatImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   mainObjectFileID: 11400000 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 6b68ef7b5531946009a2f1b32235af23 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,6 @@ | ||||||
|  | 1234567890 | ||||||
|  | `~!@#$%^A&*()-=_+[]{}\|;:'",.<>?/ | ||||||
|  | ABCDEFGHIGKLMNOPQRSTUVWXYZ | ||||||
|  | abcdefghigklmnopqrstuvwxyz | ||||||
|  | 测试功能好的不行取消关闭打开标题是否大小上下欢迎你我他它按钮屏幕尺寸:  | ||||||
|  | 很抱歉听到这个谢谢! | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c6fd678cebef2485f976d117af8d2bdc | ||||||
|  | TextScriptImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4cb12b860c05d4fa395f7223626d40cd | ||||||
|  | TrueTypeFontImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 4 | ||||||
|  |   fontSize: 16 | ||||||
|  |   forceTextureCase: -2 | ||||||
|  |   characterSpacing: 0 | ||||||
|  |   characterPadding: 1 | ||||||
|  |   includeFontData: 1 | ||||||
|  |   fontNames: | ||||||
|  |   - Microsoft YaHei | ||||||
|  |   fallbackFontReferences: [] | ||||||
|  |   customCharacters:  | ||||||
|  |   fontRenderingMode: 0 | ||||||
|  |   ascentCalculationMode: 1 | ||||||
|  |   useLegacyBoundsCalculation: 0 | ||||||
|  |   shouldRoundAdvanceValue: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: a8c61b5305f2a4f87a3499e983d37da5 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d5dab2f335bb04ded9b404fa08c7cc15 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,140 @@ | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 屏幕方向 | ||||||
|  |     /// </summary> | ||||||
|  |     public enum ScreenOrientation | ||||||
|  |     { | ||||||
|  |         Portrait = 0, | ||||||
|  |         Landscape, | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public interface IDisposable | ||||||
|  |     { | ||||||
|  |         void Dispose(); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public interface IContext | ||||||
|  |     { | ||||||
|  |         //--------- Components ----------------- | ||||||
|  |         bool RegisterResManager<T>(T manager, string name = "") where T : IResManager, new(); | ||||||
|  |         T GetResManager<T>(string name = "") where T : IResManager, new(); | ||||||
|  | 
 | ||||||
|  |         bool RegisterModel<T>(T model, string name = "") where T : IModel, new(); | ||||||
|  |         T GetModel<T>(string name = "") where T : IModel, new(); | ||||||
|  |          | ||||||
|  |         bool RegisterController<T>(T controller, string name = "") where T : IController, new(); | ||||||
|  |         T GetController<T>(string name = "") where T : IController, new(); | ||||||
|  |          | ||||||
|  |         bool RegisterHelper<T>(T controller, string name = "") where T : IHelper, new(); | ||||||
|  |         T GetHelper<T>(string name = "") where T : IHelper, new(); | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         void RegisterUpdater(IUpdater updater); | ||||||
|  |         void UnregisterUpdater(IUpdater updater); | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 消息管线 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IEventPipeline | ||||||
|  |     { | ||||||
|  |         //--------- Event Bus ------------------ | ||||||
|  |         public void Subscribe<T>(Action<T> onReceiveMessage) where T : struct; | ||||||
|  |         public void Unsubscribe<T>(Action<T> onReceiveMessage) where T : struct; | ||||||
|  |         public void Send<T>(T message) where T : struct; | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 控制器接口 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IController | ||||||
|  |     { | ||||||
|  |         string Name { get;} | ||||||
|  |         Context Context { get; set;} | ||||||
|  |         void Init(); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public interface IModel | ||||||
|  |     { | ||||||
|  |         string Name { get;} | ||||||
|  |         void Update(); // 数据刷新 | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public interface IView | ||||||
|  |     { | ||||||
|  |         string Name { get;} | ||||||
|  |         void Refresh();  // UI 刷新 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public interface IHelper | ||||||
|  |     { | ||||||
|  |         string Name { get;} | ||||||
|  |         Context Context { get; set;} | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public interface IResManager | ||||||
|  |     { | ||||||
|  |         string Name { get;} | ||||||
|  |         Context Context { get; set;} | ||||||
|  |         void Init(); | ||||||
|  |         T Load<T>(string resUri) where T : UnityEngine.Object; | ||||||
|  |         void LoadAsync(string resUri, Action<ResLoadInfo> onLoaded); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 资源加载器 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IResLoader | ||||||
|  |     { | ||||||
|  |         void LoadAsync(string resUri, Action<ResLoadInfo> onLoaded); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 更新器 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IUpdater | ||||||
|  |     { | ||||||
|  |         void OnUpdate(); | ||||||
|  |         bool IsStopped { get; set; } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 资源加载信息 | ||||||
|  |     /// </summary> | ||||||
|  |     public class ResLoadInfo | ||||||
|  |     { | ||||||
|  |         public string uri = ""; | ||||||
|  |          | ||||||
|  |         public bool success = false;  // 加载是否成功 | ||||||
|  | 
 | ||||||
|  |         public string bundleName = ""; // bundle包的名称 | ||||||
|  | 
 | ||||||
|  |         public object target = null; | ||||||
|  | 
 | ||||||
|  |         public ResLoadInfo() | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public ResLoadInfo(string uri) | ||||||
|  |         { | ||||||
|  |             this.uri = uri; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public GameObject AsGameObject() => target as GameObject; | ||||||
|  |         public Texture AsTexture() => target as Texture; | ||||||
|  |         public T AsObject<T>() where T : UnityEngine.Object => (T)target; | ||||||
|  |         public string AsString() => (target as TextAsset)?.text ?? ""; | ||||||
|  |         public byte[] AsBinary() => (byte[])target; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 64b927914fca4610ac2f0ad9f858f5ed | ||||||
|  | timeCreated: 1707107986 | ||||||
|  | @ -0,0 +1,194 @@ | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |      | ||||||
|  |      | ||||||
|  |     public class Context : IContext, IEventPipeline, IDisposable | ||||||
|  |     { | ||||||
|  |         protected ContextObject _contextObj; | ||||||
|  |         private EventBus _eventBus; | ||||||
|  |         private Dictionary<string, IModel> _models; | ||||||
|  |         private Dictionary<string, IController> _controllers; | ||||||
|  |         private Dictionary<string, IResManager> _resManagers; | ||||||
|  |         private Dictionary<string, IHelper> _helpers; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static T Create<T> (string name = "") where T : Context, new() | ||||||
|  |         { | ||||||
|  |             var context = new T(); | ||||||
|  |             context.Init(); | ||||||
|  |             return context; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void Init() | ||||||
|  |         { | ||||||
|  |             _contextObj = ContextObject.Create("guru_context"); | ||||||
|  |             _contextObj.OnDestroyed = OnDestroyHandler; | ||||||
|  |             _contextObj.OnStart = OnStart; | ||||||
|  |              | ||||||
|  |             _eventBus = new EventBus(); | ||||||
|  |             _models = new Dictionary<string, IModel>(10); | ||||||
|  |             _controllers = new Dictionary<string, IController>(10); | ||||||
|  |             _resManagers = new Dictionary<string, IResManager>(10); | ||||||
|  |             _helpers = new Dictionary<string, IHelper>(10); | ||||||
|  | 
 | ||||||
|  |             OnCreated(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected virtual void OnCreated() | ||||||
|  |         { | ||||||
|  |                | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected virtual void OnStart() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public virtual void Dispose() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnDestroyHandler() | ||||||
|  |         { | ||||||
|  |             OnDestroyed(); | ||||||
|  |             Dispose(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected virtual void OnDestroyed() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #region 注册组件 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private static string GetInstanceName<T>(string instName = "") | ||||||
|  |         { | ||||||
|  |             if(string.IsNullOrEmpty(instName)) instName = nameof(T); | ||||||
|  |             return instName; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private bool TryAddUpdater(object obj) | ||||||
|  |         { | ||||||
|  |             if (obj is IUpdater a) | ||||||
|  |             { | ||||||
|  |                 RegisterUpdater(a); | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public bool RegisterResManager<T>(T manager, string name = "") where T : IResManager, new() | ||||||
|  |         { | ||||||
|  |             TryAddUpdater(manager); | ||||||
|  |             if (_resManagers.TryAdd(GetInstanceName<T>(name), manager)) | ||||||
|  |             { | ||||||
|  |                 manager.Context = this; | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public T GetResManager<T>(string name = "") where T : IResManager, new() | ||||||
|  |         { | ||||||
|  |             return _resManagers.TryGetValue(GetInstanceName<T>(name), out var m) ? (T)m : default(T); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 注册数据模型 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param instName="model"></param> | ||||||
|  |         /// <param name="name"></param> | ||||||
|  |         /// <typeparam instName="T"></typeparam> | ||||||
|  |         public bool RegisterModel<T>(T model, string name = "") where T : IModel, new() | ||||||
|  |         { | ||||||
|  |             TryAddUpdater(model); | ||||||
|  |             return _models.TryAdd(GetInstanceName<T>(name), model); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public T GetModel<T>(string name = "") where T : IModel, new() | ||||||
|  |         { | ||||||
|  |             return _models.TryGetValue(GetInstanceName<T>(name), out var m) ? (T)m : default(T); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 注册辅助工具 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="helper"></param> | ||||||
|  |         /// <param name="name"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public bool RegisterHelper<T>(T helper, string name = "") where T : IHelper, new() | ||||||
|  |         { | ||||||
|  |             TryAddUpdater(helper); | ||||||
|  |             return _helpers.TryAdd(GetInstanceName<T>(name), helper); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public T GetHelper<T>(string name = "") where T : IHelper, new() | ||||||
|  |         { | ||||||
|  |             return _helpers.TryGetValue(GetInstanceName<T>(name), out var m) ? (T)m : default(T); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 注册控制器 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param instName="controller"></param> | ||||||
|  |         /// <typeparam instName="T"></typeparam> | ||||||
|  |         public bool RegisterController<T>(T controller, string name = "") where T : IController, new() | ||||||
|  |         { | ||||||
|  |             TryAddUpdater(controller); | ||||||
|  |             if (_controllers.TryAdd(GetInstanceName<T>(name), controller)) | ||||||
|  |             { | ||||||
|  |                 controller.Context = this; | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         public T GetController<T>(string name = "") where T : IController, new() | ||||||
|  |         { | ||||||
|  |             return _controllers.TryGetValue(GetInstanceName<T>(name), out var c) ? (T)c : default(T); | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region 事件管理 | ||||||
|  | 
 | ||||||
|  |         public void Subscribe<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             _eventBus.Subscribe(onReceiveMessage); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void Unsubscribe<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             _eventBus.Unsubscribe(onReceiveMessage); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void Send<T>(T message) where T : struct | ||||||
|  |         { | ||||||
|  |             _eventBus.Send(message); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region 更新挂载 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         public void RegisterUpdater(IUpdater updater) | ||||||
|  |         { | ||||||
|  |             _contextObj.AddUpdater(updater); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void UnregisterUpdater(IUpdater updater) | ||||||
|  |         { | ||||||
|  |             _contextObj.RemoveUpdater(updater); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: e04392ec6b0045e99cc840d18e6b46bb | ||||||
|  | timeCreated: 1707098801 | ||||||
|  | @ -0,0 +1,90 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using UnityEngine; | ||||||
|  | 
 | ||||||
|  |     public class ContextObject: MonoBehaviour | ||||||
|  |     { | ||||||
|  |         private const string InstanceName = "app_context"; | ||||||
|  |          | ||||||
|  |         private HashSet<IUpdater> _updaters; | ||||||
|  |         private HashSet<IUpdater> _updatersWillRemove; | ||||||
|  |          | ||||||
|  |         public Action OnDestroyed; | ||||||
|  |         public Action OnStart; | ||||||
|  |          | ||||||
|  |         public static ContextObject Create(string name = "" ) | ||||||
|  |         { | ||||||
|  |             if (string.IsNullOrEmpty(name)) name = InstanceName; | ||||||
|  |             var go = new GameObject(name); | ||||||
|  |             DontDestroyOnLoad(go); | ||||||
|  |             return go.AddComponent<ContextObject>(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void AddUpdater(IUpdater updater) | ||||||
|  |         { | ||||||
|  |             _updaters.Add(updater); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void RemoveUpdater(IUpdater updater) | ||||||
|  |         { | ||||||
|  |             updater.IsStopped = true; | ||||||
|  |             _updatersWillRemove.Add(updater); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region 生命周期 | ||||||
|  | 
 | ||||||
|  |         private void Awake() | ||||||
|  |         { | ||||||
|  |             _updaters = new HashSet<IUpdater>(); | ||||||
|  |             _updatersWillRemove = new HashSet<IUpdater>(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         void Start() | ||||||
|  |         { | ||||||
|  |             OnStart?.Invoke(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnDestroy() | ||||||
|  |         { | ||||||
|  |             OnDestroyed?.Invoke(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void SelfDestroy() | ||||||
|  |         { | ||||||
|  |             Destroy(gameObject); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void Update() | ||||||
|  |         { | ||||||
|  |             if(_updaters.Count > 0) | ||||||
|  |             { | ||||||
|  |                 foreach (var updater in _updaters) | ||||||
|  |                 { | ||||||
|  |                     if(updater != null &&  | ||||||
|  |                        !updater.IsStopped &&  | ||||||
|  |                        !_updatersWillRemove.Contains(updater)) | ||||||
|  |                     { | ||||||
|  |                         updater.OnUpdate(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 if (_updatersWillRemove.Count > 0) | ||||||
|  |                 { | ||||||
|  |                     foreach (var d in _updatersWillRemove) | ||||||
|  |                     { | ||||||
|  |                         _updaters.Remove(d); | ||||||
|  |                     } | ||||||
|  |                     _updatersWillRemove.Clear(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: b7952cd3aec24f84b57ab292a82055e9 | ||||||
|  | timeCreated: 1707121139 | ||||||
|  | @ -0,0 +1,122 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 事件管线基类 | ||||||
|  |     /// </summary> | ||||||
|  |     public class EventBus | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         private Dictionary<string, HashSet<Delegate>> _eventDict; | ||||||
|  |         protected Dictionary<string, HashSet<Delegate>> EventDict | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_eventDict == null) | ||||||
|  |                 { | ||||||
|  |                     _eventDict = new Dictionary<string, HashSet<Delegate>>(20); | ||||||
|  |                 } | ||||||
|  |                 return _eventDict; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 发送事件 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="eventBody"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public bool Send<T>(T eventBody) where T : struct | ||||||
|  |         { | ||||||
|  |             return Trigger<T>(eventBody); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 订阅消息 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="onReceiveMessage"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         public void Subscribe<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             AddListener(onReceiveMessage); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void Unsubscribe<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             RemoveListener(onReceiveMessage); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public void Dispose() | ||||||
|  |         { | ||||||
|  |             if (_eventDict != null) | ||||||
|  |             { | ||||||
|  |                 foreach (var actions in _eventDict.Values) | ||||||
|  |                 { | ||||||
|  |                     actions.Clear(); | ||||||
|  |                 } | ||||||
|  |                 _eventDict.Clear(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected bool HasEvent<T>() where T : struct | ||||||
|  |         { | ||||||
|  |             return EventDict.ContainsKey(nameof(T)); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         protected void AddListener<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             if (!HasEvent<T>()) | ||||||
|  |             { | ||||||
|  |                 EventDict[nameof(T)] = new HashSet<Delegate>(); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             EventDict[nameof(T)].Add(onReceiveMessage); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         protected void RemoveListener<T>(Action<T> onReceiveMessage) where T : struct | ||||||
|  |         { | ||||||
|  |             if (HasEvent<T>()) | ||||||
|  |             { | ||||||
|  |                 if (EventDict[nameof(T)].Contains(onReceiveMessage)) | ||||||
|  |                 { | ||||||
|  |                     EventDict[nameof(T)].Remove(onReceiveMessage); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         ///  | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="message"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         protected bool Trigger<T>(T message) where T : struct | ||||||
|  |         { | ||||||
|  |             if (HasEvent<T>()) | ||||||
|  |             { | ||||||
|  |                 HashSet<Delegate> newActions = new HashSet<Delegate>(EventDict[nameof(T)].Count); | ||||||
|  |                 foreach (var d in EventDict[nameof(T)]) | ||||||
|  |                 { | ||||||
|  |                     if (d.Target != null) | ||||||
|  |                     { | ||||||
|  |                         (d as Action<T>)?.Invoke(message); | ||||||
|  |                         newActions.Add(d); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 EventDict[nameof(T)] = newActions; // 过滤掉不存在的时间 | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 4b2ee0da42eb449facddde6b938a7f6e | ||||||
|  | timeCreated: 1707096820 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 2526f3ebe9b743918a4133394d01f150 | ||||||
|  | timeCreated: 1707099361 | ||||||
|  | @ -0,0 +1,24 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  |     using UnityEngine; | ||||||
|  |      | ||||||
|  |     /// <summary> | ||||||
|  |     /// 批量加载器 | ||||||
|  |     /// </summary> | ||||||
|  |     public interface IBatchLoader | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// 批量加载 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="resUriList"></param> | ||||||
|  |         /// <param name="onLoadComplete"></param> | ||||||
|  |         void LoadQueue(string[] resUriList, Action<List<ResLoadInfo>> onLoadComplete); | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |      | ||||||
|  |      | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: df551e2b5ddb44b28a98a1ac027fa3c2 | ||||||
|  | timeCreated: 1707099820 | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     // 对象池 | ||||||
|  |     public interface IPool<T> | ||||||
|  |     { | ||||||
|  |         int PreSpawnCount { get; set; } | ||||||
|  |         string Name { get; } | ||||||
|  |         T Get(); | ||||||
|  |         T Create(); | ||||||
|  |         void Recycle(T obj); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1642ab73dc4741c091f8fd6831bf6057 | ||||||
|  | timeCreated: 1707113780 | ||||||
|  | @ -0,0 +1,313 @@ | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using UnityEngine; | ||||||
|  | using UnityEngine.Networking; | ||||||
|  | using Object = UnityEngine.Object; | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     public enum ResType | ||||||
|  |     { | ||||||
|  |         Unknown = 0, | ||||||
|  |         Bundle, | ||||||
|  |         Texture, | ||||||
|  |         File, | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public class ResUriHelper | ||||||
|  |     { | ||||||
|  |         public const string FilePrefix = "file::"; | ||||||
|  |         public const string BundlePrefix = "bundle::"; | ||||||
|  |         public const string TexturePrefix = "texture::"; | ||||||
|  |         public const string HttpPrefix = "http://"; | ||||||
|  |         public const string HttpsPrefix = "https://"; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public static string GetFileUri(string url) | ||||||
|  |         { | ||||||
|  |             return $"{FilePrefix}{url}"; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public static string GetBundleUri(string url) | ||||||
|  |         { | ||||||
|  |             return $"{BundlePrefix}{url}"; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public static string GetTextureUri(string url) | ||||||
|  |         { | ||||||
|  |             return $"{TexturePrefix}{url}"; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public static void UriToType(string uri, out ResType type, out string url) | ||||||
|  |         { | ||||||
|  |             type = ResType.Unknown; | ||||||
|  |             url = uri; | ||||||
|  |             if (uri.StartsWith(FilePrefix)) | ||||||
|  |             { | ||||||
|  |                 type = ResType.File; | ||||||
|  |                 url = uri.Substring(FilePrefix.Length); | ||||||
|  |             } | ||||||
|  |             else if (uri.StartsWith(BundlePrefix)) | ||||||
|  |             { | ||||||
|  |                 type = ResType.Bundle; | ||||||
|  |                 url = uri.Substring(BundlePrefix.Length); | ||||||
|  |             } | ||||||
|  |             else if (uri.StartsWith(TexturePrefix)) | ||||||
|  |             { | ||||||
|  |                 type = ResType.Texture; | ||||||
|  |                 url = uri.Substring(TexturePrefix.Length); | ||||||
|  |             } | ||||||
|  |             else if (uri.StartsWith(HttpPrefix) || uri.StartsWith(HttpsPrefix)) | ||||||
|  |             { | ||||||
|  |                 type = ResType.File; | ||||||
|  |                 url = uri; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     public class ResLoaderBase: IResLoader | ||||||
|  |     { | ||||||
|  |         public int RetryTimes { get; set; } = 3; | ||||||
|  |         private bool _iSBusy = false; | ||||||
|  |         public bool IsBusy | ||||||
|  |         { | ||||||
|  |             get => _iSBusy; | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 _iSBusy = value; | ||||||
|  |                 if(!_iSBusy) OnLoaderFree?.Invoke(this); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Action<ResLoaderBase> OnLoaderFree; | ||||||
|  | 
 | ||||||
|  |         private Queue<OneResLoadTask> _taskPool = new Queue<OneResLoadTask>(10); | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #region 加载逻辑 | ||||||
|  | 
 | ||||||
|  |         internal static OneResLoadTask CreateBundleTask(string url, Action<ResLoadInfo> callback, Action<bool, OneResLoadTask> handler) | ||||||
|  |         { | ||||||
|  |             return OneResLoadTask.Create(url, callback, handler, UnityWebRequestAssetBundle.GetAssetBundle(url)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         internal static OneResLoadTask CreateTextureTask(string url, Action<ResLoadInfo> callback, Action<bool, OneResLoadTask> handler) | ||||||
|  |         { | ||||||
|  |             return OneResLoadTask.Create(url, callback, handler, UnityWebRequestTexture.GetTexture(url, true));; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         internal static OneResLoadTask CreateFileTask(string url, Action<ResLoadInfo> callback, Action<bool, OneResLoadTask> handler) | ||||||
|  |         { | ||||||
|  |             return OneResLoadTask.Create(url, callback, handler, new UnityWebRequest(url));; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 异步加载 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="resUri"></param> | ||||||
|  |         /// <param name="onLoadComplete"></param> | ||||||
|  |         public void LoadAsync(string resUri, Action<ResLoadInfo> onLoadComplete) | ||||||
|  |         { | ||||||
|  |             ResUriHelper.UriToType(resUri, out var type, out var url); | ||||||
|  |             switch (type) | ||||||
|  |             { | ||||||
|  |                 case ResType.Bundle: | ||||||
|  |                     LoadBundle(url, onLoadComplete); | ||||||
|  |                     break; | ||||||
|  |                 case ResType.Texture: | ||||||
|  |                     LoadTexture(url, onLoadComplete); | ||||||
|  |                     break; | ||||||
|  |                 case ResType.File: | ||||||
|  |                     LoadFile(url, onLoadComplete); | ||||||
|  |                     break; | ||||||
|  |                 default: | ||||||
|  |                     Debug.LogError($"--- Unknown ResType: {type}"); | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 开始异步加载 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="task"></param> | ||||||
|  |         /// <param name="onLoadComplete"></param> | ||||||
|  |         private void StartAsyncLoading(OneResLoadTask task) | ||||||
|  |         { | ||||||
|  |             IsBusy = true; | ||||||
|  |             task.www.SendWebRequest().completed += ao => | ||||||
|  |             { | ||||||
|  |                 if (task.www.result == UnityWebRequest.Result.Success) | ||||||
|  |                 { | ||||||
|  |                     task.loadHandler?.Invoke(true, task); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     if (task.retryTimes < RetryTimes) | ||||||
|  |                     { | ||||||
|  |                         task.retryTimes++; | ||||||
|  |                         StartAsyncLoading(task); | ||||||
|  |                     } | ||||||
|  |                     else | ||||||
|  |                     { | ||||||
|  |                         task.loadHandler?.Invoke(false, task); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void AddLoadTask(OneResLoadTask task) | ||||||
|  |         { | ||||||
|  |             if (IsBusy) | ||||||
|  |             { | ||||||
|  |                 _taskPool.Enqueue(task); // 入队等待 | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 StartAsyncLoading(task); // 直接加载 | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region 加载 Bundle 资源 | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 加载 Bundle | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="url"></param> | ||||||
|  |         /// <param name="onLoadComplete"></param> | ||||||
|  |         public void LoadBundle(string url, Action<ResLoadInfo> onLoadComplete) | ||||||
|  |         { | ||||||
|  |             AddLoadTask(CreateBundleTask(url, onLoadComplete, OnBundleLoaded)); | ||||||
|  |         } | ||||||
|  |         private void OnBundleLoaded(bool success, OneResLoadTask task) | ||||||
|  |         { | ||||||
|  | 
 | ||||||
|  |             var info = new ResLoadInfo(task.url); | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 var ab = DownloadHandlerAssetBundle.GetContent(task.www); | ||||||
|  |                 if(ab != null) | ||||||
|  |                 { | ||||||
|  |                     info.success = true; | ||||||
|  |                     info.target = ab; | ||||||
|  |                     info.bundleName = ab.name; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             task.callback?.Invoke(info); | ||||||
|  |             SetFree(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region 加载二进制文件 | ||||||
|  | 
 | ||||||
|  |         public void LoadFile(string url, Action<ResLoadInfo> onLoadComplete) | ||||||
|  |         { | ||||||
|  |             if (IsBusy) | ||||||
|  |             { | ||||||
|  |                 Debug.LogError($"--- Loader is busy, canot load this task"); | ||||||
|  |                 return;  | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |             StartAsyncLoading(CreateFileTask(url, onLoadComplete, OnFileLoaded)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private void OnFileLoaded(bool success, OneResLoadTask task) | ||||||
|  |         { | ||||||
|  |             var info = new ResLoadInfo(task.url); | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 var bytes = task.www.downloadHandler?.data ?? null; | ||||||
|  |                 if(bytes != null) | ||||||
|  |                 { | ||||||
|  |                     info.success = true; | ||||||
|  |                     info.target = bytes; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             task.callback?.Invoke(info); | ||||||
|  |             SetFree(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  |         #region 加载图片 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         public void LoadTexture(string url, Action<ResLoadInfo> onLoadComplete) | ||||||
|  |         { | ||||||
|  |             var request = CreateTextureTask(url, onLoadComplete, OnTextureLoaded); | ||||||
|  |             if (!IsBusy) | ||||||
|  |             { | ||||||
|  |                 StartAsyncLoading(request); | ||||||
|  |             } | ||||||
|  |             _taskPool.Enqueue(request); | ||||||
|  |               | ||||||
|  |         } | ||||||
|  |         void OnTextureLoaded(bool success, OneResLoadTask task) | ||||||
|  |         { | ||||||
|  |             var info = new ResLoadInfo(task.url); | ||||||
|  |             if (success) | ||||||
|  |             { | ||||||
|  |                 var texture = DownloadHandlerTexture.GetContent(task.www); | ||||||
|  |                 if (texture != null) | ||||||
|  |                 { | ||||||
|  |                     info.success = true; | ||||||
|  |                     info.target = texture; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             task.callback?.Invoke(info); | ||||||
|  |             SetFree(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |         #region 加载器空闲 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void SetFree() | ||||||
|  |         { | ||||||
|  |             if (_taskPool.Count > 0) | ||||||
|  |             { | ||||||
|  |                 StartAsyncLoading(_taskPool.Dequeue()); | ||||||
|  |             } | ||||||
|  |             IsBusy = false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 单挑加载任务类 | ||||||
|  |     /// </summary> | ||||||
|  |     internal struct OneResLoadTask | ||||||
|  |     { | ||||||
|  |         public string url; | ||||||
|  |         public int retryTimes; | ||||||
|  |         public Action<ResLoadInfo> callback; | ||||||
|  |         public UnityWebRequest www; | ||||||
|  |         public Action<bool, OneResLoadTask> loadHandler; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public static OneResLoadTask Create(string url, Action<ResLoadInfo> callback, Action<bool, OneResLoadTask> handler, | ||||||
|  |             UnityWebRequest www) | ||||||
|  |         { | ||||||
|  |             return new OneResLoadTask() | ||||||
|  |             { | ||||||
|  |                 url = url, | ||||||
|  |                 callback = callback, | ||||||
|  |                 loadHandler = handler, | ||||||
|  |                 www = www, | ||||||
|  |                 retryTimes = 0, | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: f6b6c659f919456fbdebe0a306061082 | ||||||
|  | timeCreated: 1707113404 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 0da7094972b9d45e38cf694574237c64 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 2dd97e478d33b4294a62ee9097b3dafe | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 25ab9515525c4d27ab588a38777351f9 | ||||||
|  | timeCreated: 1707187018 | ||||||
|  | @ -0,0 +1,115 @@ | ||||||
|  | %YAML 1.1 | ||||||
|  | %TAG !u! tag:unity3d.com,2011: | ||||||
|  | --- !u!1 &4973367134946982464 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 7087308942415154381} | ||||||
|  |   - component: {fileID: 3775355190176969404} | ||||||
|  |   - component: {fileID: 5216159452735947783} | ||||||
|  |   - component: {fileID: 6513792890421400829} | ||||||
|  |   - component: {fileID: 2623612401829160794} | ||||||
|  |   m_Layer: 0 | ||||||
|  |   m_Name: root_canvas | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &7087308942415154381 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4973367134946982464} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 0, y: 0, z: 0} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 0} | ||||||
|  |   m_RootOrder: 0 | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0, y: 0} | ||||||
|  |   m_AnchorMax: {x: 0, y: 0} | ||||||
|  |   m_AnchoredPosition: {x: 0, y: 0} | ||||||
|  |   m_SizeDelta: {x: 0, y: 0} | ||||||
|  |   m_Pivot: {x: 0, y: 0} | ||||||
|  | --- !u!223 &3775355190176969404 | ||||||
|  | Canvas: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4973367134946982464} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   serializedVersion: 3 | ||||||
|  |   m_RenderMode: 0 | ||||||
|  |   m_Camera: {fileID: 0} | ||||||
|  |   m_PlaneDistance: 100 | ||||||
|  |   m_PixelPerfect: 1 | ||||||
|  |   m_ReceivesEvents: 1 | ||||||
|  |   m_OverrideSorting: 0 | ||||||
|  |   m_OverridePixelPerfect: 0 | ||||||
|  |   m_SortingBucketNormalizedSize: 0 | ||||||
|  |   m_AdditionalShaderChannelsFlag: 0 | ||||||
|  |   m_SortingLayerID: 0 | ||||||
|  |   m_SortingOrder: 0 | ||||||
|  |   m_TargetDisplay: 0 | ||||||
|  | --- !u!114 &5216159452735947783 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4973367134946982464} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_UiScaleMode: 1 | ||||||
|  |   m_ReferencePixelsPerUnit: 100 | ||||||
|  |   m_ScaleFactor: 1 | ||||||
|  |   m_ReferenceResolution: {x: 1080, y: 2340} | ||||||
|  |   m_ScreenMatchMode: 0 | ||||||
|  |   m_MatchWidthOrHeight: 0 | ||||||
|  |   m_PhysicalUnit: 3 | ||||||
|  |   m_FallbackScreenDPI: 96 | ||||||
|  |   m_DefaultSpriteDPI: 96 | ||||||
|  |   m_DynamicPixelsPerUnit: 1 | ||||||
|  |   m_PresetInfoIsWorld: 0 | ||||||
|  | --- !u!114 &6513792890421400829 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4973367134946982464} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_IgnoreReversedGraphics: 1 | ||||||
|  |   m_BlockingObjects: 0 | ||||||
|  |   m_BlockingMask: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     m_Bits: 4294967295 | ||||||
|  | --- !u!114 &2623612401829160794 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 4973367134946982464} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: eaa3735b2d7548e5bb7fe7ae036cbe36, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 0ca38236c3e064c30bbd40d47ad1e872 | ||||||
|  | PrefabImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: b2bf33bdf70742a0ab4d103aa1369252 | ||||||
|  | timeCreated: 1707098815 | ||||||
|  | @ -0,0 +1,142 @@ | ||||||
|  | 
 | ||||||
|  | namespace Guru.UI | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using UnityEngine.UI; | ||||||
|  |      | ||||||
|  |     public class UIRoot : ViewBase | ||||||
|  |     { | ||||||
|  |         const string PrefabPath = "guru/ui/root_canvas"; | ||||||
|  |         private static UIRoot _instance; | ||||||
|  |         public static UIRoot Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) _instance = LoadInstance(); | ||||||
|  |                 return _instance;    | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// CloneObject 对象 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         private static UIRoot LoadInstance() | ||||||
|  |         { | ||||||
|  |             var ui = CloneResources<UIRoot>(PrefabPath); | ||||||
|  |             ui.Init(); | ||||||
|  |             return ui; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public static T Clone<T>(GameObject prefab, Transform container = null) where T :Component | ||||||
|  |         { | ||||||
|  |             var go = Instantiate(prefab, container); | ||||||
|  |             if (go != null) | ||||||
|  |             { | ||||||
|  |                 go.name = nameof(T).ToLower(); | ||||||
|  |                 return go.GetComponent<T>(); | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static T CloneResources<T>(string path, Transform container = null) where T : Component | ||||||
|  |         { | ||||||
|  |             var prefab = Resources.Load<GameObject>(path); | ||||||
|  |             if( null != prefab) return Clone<T>(prefab, container); | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         private Canvas _canvas; | ||||||
|  |         private CanvasScaler _canvasScaler; | ||||||
|  |         private Transform _rootNode; | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         private void Init() | ||||||
|  |         { | ||||||
|  |             DontDestroyOnLoad(gameObject); | ||||||
|  |             gameObject.name = "guru_ui"; | ||||||
|  |             _rootNode = CreateEmptyNode("root"); | ||||||
|  | 
 | ||||||
|  |             _canvas = gameObject.GetComponent<Canvas>(); | ||||||
|  |             _canvasScaler = gameObject.GetComponent<CanvasScaler>(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 引用分辨率 | ||||||
|  |         /// </summary> | ||||||
|  |         public Vector2 ReferenceResolution | ||||||
|  |         { | ||||||
|  |             get => _canvasScaler.referenceResolution; | ||||||
|  |             set => _canvasScaler.referenceResolution = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 宽高适配 | ||||||
|  |         /// </summary> | ||||||
|  |         public float MatchWidthOrHeight | ||||||
|  |         { | ||||||
|  |             get => _canvasScaler.matchWidthOrHeight; | ||||||
|  |             set => _canvasScaler.matchWidthOrHeight = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 屏幕渲染 Order  | ||||||
|  |         /// </summary> | ||||||
|  |         public int SortingOrder | ||||||
|  |         { | ||||||
|  |             get => _canvas.sortingOrder; | ||||||
|  |             set => _canvas.sortingOrder = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region 节点操作 | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         public RectTransform CreateEmptyNode(string nodeName = "node", Transform parent = null) | ||||||
|  |         { | ||||||
|  |             if (parent == null) parent = transform; | ||||||
|  |             var go = new GameObject(nodeName); | ||||||
|  |             go.transform.SetParent(parent, false); | ||||||
|  |             go.transform.localScale = Vector3.one; | ||||||
|  |             var c = go.AddComponent<RectTransform>(); | ||||||
|  |             c.anchorMax = Vector2.one; | ||||||
|  |             c.anchorMin = Vector2.zero; | ||||||
|  |             c.sizeDelta = Vector2.zero; | ||||||
|  |             c.anchoredPosition = Vector2.zero; | ||||||
|  |             c.pivot = Vector2.one * 0.5f; | ||||||
|  |              | ||||||
|  |             return c; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public RectTransform CreateNodeFromPath(string path, Transform parent = null) | ||||||
|  |         { | ||||||
|  |             var names = path.Split('/'); | ||||||
|  |             if (parent == null) parent = _rootNode; | ||||||
|  |             var node = parent as RectTransform; | ||||||
|  |             foreach (var n in names) | ||||||
|  |             { | ||||||
|  |                 node = CreateEmptyNode(n, node); | ||||||
|  |             } | ||||||
|  |             return node; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: eaa3735b2d7548e5bb7fe7ae036cbe36 | ||||||
|  | timeCreated: 1707046536 | ||||||
|  | @ -0,0 +1,84 @@ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | using System; | ||||||
|  | 
 | ||||||
|  | namespace Guru.UI | ||||||
|  | { | ||||||
|  |     using UnityEngine; | ||||||
|  |      | ||||||
|  |     public class ViewBase: MonoBehaviour, IView, IDisposable | ||||||
|  |     { | ||||||
|  | 
 | ||||||
|  |         private Transform _transform; | ||||||
|  |         public Transform Transform | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_transform == null) _transform = gameObject.transform; | ||||||
|  |                 return _transform; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private RectTransform _rectTransform; | ||||||
|  |         public RectTransform RectTransform | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_rectTransform == null) _rectTransform = gameObject.GetComponent<RectTransform>(); | ||||||
|  |                 return _rectTransform; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         public string Name | ||||||
|  |         { | ||||||
|  |             get => gameObject.name; | ||||||
|  |             set => gameObject.name = value; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public Vector3 LocalPosition | ||||||
|  |         { | ||||||
|  |             get => Transform.localPosition; | ||||||
|  |             set => Transform.localPosition = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector3 Position | ||||||
|  |         { | ||||||
|  |             get => Transform.position; | ||||||
|  |             set => Transform.position = value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Vector2 AnchoredPos | ||||||
|  |         { | ||||||
|  |             get => RectTransform.anchoredPosition; | ||||||
|  |             set => RectTransform.anchoredPosition = value; | ||||||
|  |         }  | ||||||
|  |          | ||||||
|  |         public float Scale | ||||||
|  |         { | ||||||
|  |             get => _transform.localScale.x; | ||||||
|  |             set => _transform.localScale = Vector3.one * value; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public bool Active | ||||||
|  |         { | ||||||
|  |             get => gameObject.activeSelf; | ||||||
|  |             set => gameObject.SetActive(value); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public Transform FindChild(string path) => Transform.Find(path); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public virtual void Refresh() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public virtual void Dispose() | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 5385c66b73384a43a11801d6c308b2ba | ||||||
|  | timeCreated: 1707046685 | ||||||
|  | @ -0,0 +1,19 @@ | ||||||
|  | { | ||||||
|  |     "name": "Guru.UI", | ||||||
|  |     "rootNamespace": "", | ||||||
|  |     "references": [ | ||||||
|  |         "I2Localization", | ||||||
|  |         "Unity.TextMeshPro", | ||||||
|  |         "DOTween.Modules", | ||||||
|  |         "GuruSDK" | ||||||
|  |     ], | ||||||
|  |     "includePlatforms": [], | ||||||
|  |     "excludePlatforms": [], | ||||||
|  |     "allowUnsafeCode": false, | ||||||
|  |     "overrideReferences": false, | ||||||
|  |     "precompiledReferences": [], | ||||||
|  |     "autoReferenced": true, | ||||||
|  |     "defineConstraints": [], | ||||||
|  |     "versionDefines": [], | ||||||
|  |     "noEngineReferences": false | ||||||
|  | } | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c8df175a9a2b742f6b14f114f1caa3bf | ||||||
|  | AssemblyDefinitionImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 0153d1c4d4664b7ab6344600aac4539d | ||||||
|  | timeCreated: 1707112218 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: d083852efee549b8b50596d17dbd3e83 | ||||||
|  | timeCreated: 1707112225 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 8950fbed73f44f6c91b0e74f3157e60f | ||||||
|  | timeCreated: 1707189542 | ||||||
|  | @ -0,0 +1,73 @@ | ||||||
|  | using Guru.UI; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |     public class GuruApp | ||||||
|  |     { | ||||||
|  |         private static GuruApp _instance; | ||||||
|  |         public static GuruApp Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) Install(); | ||||||
|  |                 return _instance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public static void Install() | ||||||
|  |         { | ||||||
|  |             _instance = new GuruApp(); | ||||||
|  |             _instance.Init(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         private GuruContext _context; | ||||||
|  |         private GuruUIController _uiController; | ||||||
|  |          | ||||||
|  |      | ||||||
|  |         private void Init() | ||||||
|  |         { | ||||||
|  |             _context = GuruContext.Instance; | ||||||
|  |             _uiController = _context.GetController<GuruUIController>(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void Dispose() | ||||||
|  |         { | ||||||
|  |             _context.Dispose(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public class GuruApp_UI | ||||||
|  |         { | ||||||
|  |             private static GuruUIController _uiController; | ||||||
|  | 
 | ||||||
|  |             internal static GuruUIController Controller_ | ||||||
|  |             { | ||||||
|  |                 get | ||||||
|  |                 { | ||||||
|  |                     if(_uiController == null) _uiController = GuruApp.Instance._uiController; | ||||||
|  |                     return _uiController; | ||||||
|  |                 } | ||||||
|  |                  | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             public static RectTransform AddNode(string nodePath = "", Transform parent = null) | ||||||
|  |             { | ||||||
|  |                 return Controller_.AddNode(nodePath, parent); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 75f3e447a052442d95272b49ebb11dde | ||||||
|  | timeCreated: 1707189779 | ||||||
|  | @ -0,0 +1,73 @@ | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Guru.UI | ||||||
|  | { | ||||||
|  |     public class GuruContext: Context | ||||||
|  |     { | ||||||
|  |         private static GuruContext _instance; | ||||||
|  |         public static GuruContext Instance | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if (_instance == null) | ||||||
|  |                     _instance = Create<GuruContext>(); | ||||||
|  |                  | ||||||
|  |                 return _instance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         private GuruResManager _resMgr; | ||||||
|  |         private GuruUIController _uiCtrl; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 初始化调用 | ||||||
|  |         /// </summary> | ||||||
|  |         protected override void OnCreated() | ||||||
|  |         { | ||||||
|  |             _resMgr = GuruResManager.Create(this); // 资源控制器 | ||||||
|  |             _uiCtrl = GuruUIController.Create(this); // UI 控制器 | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         protected override void OnStart() | ||||||
|  |         { | ||||||
|  |             AutoOrientation(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 设置旋转 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="orientation"></param> | ||||||
|  |         public void SetOrientation(ScreenOrientation orientation = ScreenOrientation.Portrait) | ||||||
|  |         { | ||||||
|  |             _uiCtrl.SetOrientation(orientation); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 自动调整方向 | ||||||
|  |         /// </summary> | ||||||
|  |         private void AutoOrientation() | ||||||
|  |         { | ||||||
|  |             // 旋转方向 | ||||||
|  |             var o = Screen.width > Screen.height ? ScreenOrientation.Landscape : ScreenOrientation.Portrait; | ||||||
|  |             SetOrientation(o); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: cd6b2523c69f4bb382ce8910392a6aee | ||||||
|  | timeCreated: 1707112232 | ||||||
|  | @ -0,0 +1,213 @@ | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     using System; | ||||||
|  |     using Object = UnityEngine.Object; | ||||||
|  |     using UnityEngine; | ||||||
|  |     using System.Collections.Generic; | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  |     public class GuruResManager : IResManager, IUpdater | ||||||
|  |     { | ||||||
|  |         public const string InstanceName = "guru_res_manager"; | ||||||
|  |         public static float CheckRequestInterval = 3; // 检查加载队列的频率 | ||||||
|  |          | ||||||
|  |         public string Name => "guru_res"; | ||||||
|  |          | ||||||
|  |         private bool _isReady; | ||||||
|  |         public bool IsReady => _isReady; | ||||||
|  |          | ||||||
|  |         public Context Context { get; set; } | ||||||
|  |          | ||||||
|  |         private LoaderPool _loaderPool; | ||||||
|  | 
 | ||||||
|  |         private Queue<ResRequest> _requests; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 注册资源管理器 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="context"></param> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public static GuruResManager Create(Context context) | ||||||
|  |         { | ||||||
|  |             var mgr = new GuruResManager(); | ||||||
|  |             mgr.Init(); | ||||||
|  |             context.RegisterResManager(mgr, InstanceName); | ||||||
|  |             return mgr; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void Init() | ||||||
|  |         { | ||||||
|  |             _isReady = true; | ||||||
|  |             _loaderPool = LoaderPool.CreatePool(); | ||||||
|  |             _requests = new Queue<ResRequest>(20); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public T CloneObject<T>(GameObject prefab, Transform container = null) where T :Component | ||||||
|  |         { | ||||||
|  |             var go = GameObject.Instantiate<GameObject>(prefab, container); | ||||||
|  |             if (go != null) | ||||||
|  |             { | ||||||
|  |                 go.name = nameof(T).ToLower(); | ||||||
|  |                 return go.GetComponent<T>(); | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 加载本地资源 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="resUri"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public T Load<T>(string resUri) where T : Object | ||||||
|  |         { | ||||||
|  |             return Resources.Load<T>(resUri); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 异步加载资源 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="resUri"></param> | ||||||
|  |         /// <param name="onLoadComplete"></param> | ||||||
|  |         /// <typeparam name="T"></typeparam> | ||||||
|  |         public void LoadAsync(string resUri, Action<ResLoadInfo> onLoadComplete) | ||||||
|  |         { | ||||||
|  |             ResRequest req =  ResRequest.Create(resUri, onLoadComplete); | ||||||
|  |             _requests.Enqueue(req); // 添加任务 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region 帧更新 | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// 帧更新 | ||||||
|  |         /// </summary> | ||||||
|  |         public void OnUpdate() | ||||||
|  |         { | ||||||
|  |             CheckLoadingList(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public bool IsStopped { get; set; } = false; | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region 加载队列 | ||||||
|  | 
 | ||||||
|  |         private float _checkLoadingDuration = 0; | ||||||
|  |         /// <summary> | ||||||
|  |         /// 检查加载队列 | ||||||
|  |         /// </summary> | ||||||
|  |         private void CheckLoadingList() | ||||||
|  |         { | ||||||
|  |             if (_requests.Count > 0 && _loaderPool.FreeCount > 0) | ||||||
|  |             { | ||||||
|  |                 _checkLoadingDuration = 0; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // 更新检查队列 | ||||||
|  |             if (_checkLoadingDuration > 0) | ||||||
|  |             { | ||||||
|  |                 _checkLoadingDuration -= Time.deltaTime; | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // 检查队列 | ||||||
|  |             while (_requests.Count > 0 && _loaderPool.FreeCount > 0) | ||||||
|  |             { | ||||||
|  |                 var loader  = _loaderPool.Get(); | ||||||
|  |                 if (loader != null) | ||||||
|  |                 { | ||||||
|  |                     var req = _requests.Dequeue(); | ||||||
|  |                     loader.LoadAsync(req.resUri, req.callback);        | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             _checkLoadingDuration = CheckRequestInterval; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |          | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 加载器池 | ||||||
|  |     /// 默认同时持有 3 个加载器 | ||||||
|  |     /// </summary> | ||||||
|  |     internal class LoaderPool: IPool<ResLoaderBase> | ||||||
|  |     { | ||||||
|  |         public string Name => "loader_pool"; | ||||||
|  |         public int PreSpawnCount { get; set; } = 3; | ||||||
|  |         private Queue<ResLoaderBase> _freeLoaders; | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         public static LoaderPool CreatePool(int initCount = 3) | ||||||
|  |         { | ||||||
|  |             if (initCount < 2) initCount = 2; // 最小 2 个 | ||||||
|  |             var pool = new LoaderPool(initCount); | ||||||
|  |             return pool; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public LoaderPool(int initCount = 0) | ||||||
|  |         { | ||||||
|  |             if (initCount > 0) PreSpawnCount = initCount; | ||||||
|  |             _freeLoaders = new Queue<ResLoaderBase>(); | ||||||
|  |             if (PreSpawnCount > 0) | ||||||
|  |             { | ||||||
|  |                 for (int i = 0; i < PreSpawnCount; i++) | ||||||
|  |                 { | ||||||
|  |                     _freeLoaders.Enqueue(Create()); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public ResLoaderBase Get() | ||||||
|  |         { | ||||||
|  |             if(FreeCount > 0) | ||||||
|  |             { | ||||||
|  |                 return _freeLoaders.Dequeue(); | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public ResLoaderBase Create() | ||||||
|  |         { | ||||||
|  |             var loader = new ResLoaderBase(); | ||||||
|  |             loader.OnLoaderFree = Recycle; | ||||||
|  |             return loader; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void Recycle(ResLoaderBase obj) | ||||||
|  |         { | ||||||
|  |             _freeLoaders.Enqueue(obj); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public int FreeCount => _freeLoaders.Count; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /// <summary> | ||||||
|  |     /// 加载需求 | ||||||
|  |     /// </summary> | ||||||
|  |     internal struct ResRequest | ||||||
|  |     { | ||||||
|  |         public string url; | ||||||
|  |         public string resUri; | ||||||
|  |         public Action<ResLoadInfo> callback;  | ||||||
|  |          | ||||||
|  |         public static ResRequest Create(string resUri, Action<ResLoadInfo> callback) | ||||||
|  |         { | ||||||
|  |             ResUriHelper.UriToType(resUri, out var type, out var url); | ||||||
|  |             return new ResRequest() | ||||||
|  |             { | ||||||
|  |                 url = url, | ||||||
|  |                 resUri = resUri, | ||||||
|  |                 callback = callback | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 067c1d30efc74f87877f39141083e735 | ||||||
|  | timeCreated: 1707112425 | ||||||
|  | @ -0,0 +1,69 @@ | ||||||
|  | using Guru.UI; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
|  | namespace Guru | ||||||
|  | { | ||||||
|  |     public class GuruUIController: IController | ||||||
|  |     { | ||||||
|  |         public string Name => "guru_ui"; | ||||||
|  |         public Context Context { get; set; } | ||||||
|  | 
 | ||||||
|  |         //----------- 设置分辨率 -------------- | ||||||
|  |         public static readonly int DefaultDesignSize_1080 = 1080; | ||||||
|  |         public static readonly int DefaultDesignSize_2340 = 2340; | ||||||
|  | 
 | ||||||
|  |         public int designWidth; | ||||||
|  |         public int designHeight; | ||||||
|  |         private UIRoot _root; | ||||||
|  |          | ||||||
|  |         public static GuruUIController Create(Context context) | ||||||
|  |         { | ||||||
|  |             var root = new GuruUIController { Context = context }; | ||||||
|  |             root.Init(); | ||||||
|  |             return root; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         private GuruResManager _resMgr; | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 初始化 | ||||||
|  |         /// </summary> | ||||||
|  |         public void Init() | ||||||
|  |         { | ||||||
|  |             _resMgr = Context.GetResManager<GuruResManager>(); | ||||||
|  |             CreateRoot(); | ||||||
|  |             SetOrientation(); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |          | ||||||
|  |         public void SetOrientation(ScreenOrientation orientation = ScreenOrientation.Portrait) | ||||||
|  |         { | ||||||
|  |             if (orientation == ScreenOrientation.Portrait) | ||||||
|  |             { | ||||||
|  |                 designWidth = DefaultDesignSize_1080; | ||||||
|  |                 designHeight = DefaultDesignSize_2340; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 designWidth = DefaultDesignSize_2340; | ||||||
|  |                 designHeight = DefaultDesignSize_1080; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         private void CreateRoot() | ||||||
|  |         { | ||||||
|  |             _root = UIRoot.Instance; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public RectTransform AddNode(string nodePath = "", Transform parent = null) | ||||||
|  |         { | ||||||
|  |             return _root.CreateNodeFromPath(nodePath, parent); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 520fd253d52a4c4e981b7fba15e06540 | ||||||
|  | timeCreated: 1707186818 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: f1336c7d00754fd086977872699f590d | ||||||
|  | timeCreated: 1707189555 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 89eaf1b11e9f4c8fabb8e2ba4cd4c16e | ||||||
|  | timeCreated: 1707187005 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: c86fbbf1ce6a4a399b3e536838dd80a3 | ||||||
|  | timeCreated: 1707187011 | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 916890d2bdef34d3088fbe463bfeabd6 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 1c61b43718571400fa616bb7ad32650e | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 711804702c7d4412d9cf75e6aa5af813 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 3e20f0681d08a445980f0205a265ef85 | ||||||
|  | folderAsset: yes | ||||||
|  | DefaultImporter: | ||||||
|  |   externalObjects: {} | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,133 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 2ca3d2144769b472cad75373d2d02166 | ||||||
|  | TextureImporter: | ||||||
|  |   internalIDToNameTable: [] | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   mipmaps: | ||||||
|  |     mipMapMode: 0 | ||||||
|  |     enableMipMap: 1 | ||||||
|  |     sRGBTexture: 1 | ||||||
|  |     linearTexture: 0 | ||||||
|  |     fadeOut: 0 | ||||||
|  |     borderMipMap: 0 | ||||||
|  |     mipMapsPreserveCoverage: 0 | ||||||
|  |     alphaTestReferenceValue: 0.5 | ||||||
|  |     mipMapFadeDistanceStart: 1 | ||||||
|  |     mipMapFadeDistanceEnd: 3 | ||||||
|  |   bumpmap: | ||||||
|  |     convertToNormalMap: 0 | ||||||
|  |     externalNormalMap: 0 | ||||||
|  |     heightScale: 0.25 | ||||||
|  |     normalMapFilter: 0 | ||||||
|  |   isReadable: 0 | ||||||
|  |   streamingMipmaps: 0 | ||||||
|  |   streamingMipmapsPriority: 0 | ||||||
|  |   vTOnly: 0 | ||||||
|  |   grayScaleToAlpha: 0 | ||||||
|  |   generateCubemap: 6 | ||||||
|  |   cubemapConvolution: 0 | ||||||
|  |   seamlessCubemap: 0 | ||||||
|  |   textureFormat: 1 | ||||||
|  |   maxTextureSize: 2048 | ||||||
|  |   textureSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     filterMode: 1 | ||||||
|  |     aniso: 1 | ||||||
|  |     mipBias: 0 | ||||||
|  |     wrapU: 0 | ||||||
|  |     wrapV: 0 | ||||||
|  |     wrapW: 0 | ||||||
|  |   nPOTScale: 0 | ||||||
|  |   lightmap: 0 | ||||||
|  |   compressionQuality: 50 | ||||||
|  |   spriteMode: 1 | ||||||
|  |   spriteExtrude: 1 | ||||||
|  |   spriteMeshType: 0 | ||||||
|  |   alignment: 0 | ||||||
|  |   spritePivot: {x: 0.5, y: 0.5} | ||||||
|  |   spritePixelsToUnits: 100 | ||||||
|  |   spriteBorder: {x: 60, y: 0, z: 60, w: 0} | ||||||
|  |   spriteGenerateFallbackPhysicsShape: 1 | ||||||
|  |   alphaUsage: 1 | ||||||
|  |   alphaIsTransparency: 1 | ||||||
|  |   spriteTessellationDetail: -1 | ||||||
|  |   textureType: 8 | ||||||
|  |   textureShape: 1 | ||||||
|  |   singleChannelComponent: 0 | ||||||
|  |   flipbookRows: 1 | ||||||
|  |   flipbookColumns: 1 | ||||||
|  |   maxTextureSizeSet: 0 | ||||||
|  |   compressionQualitySet: 0 | ||||||
|  |   textureFormatSet: 0 | ||||||
|  |   ignorePngGamma: 0 | ||||||
|  |   applyGammaDecoding: 0 | ||||||
|  |   cookieLightType: 0 | ||||||
|  |   platformSettings: | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: DefaultTexturePlatform | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Standalone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: iPhone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Android | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   spriteSheet: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     sprites: [] | ||||||
|  |     outline: [] | ||||||
|  |     physicsShape: [] | ||||||
|  |     bones: [] | ||||||
|  |     spriteID: 5e97eb03825dee720800000000000000 | ||||||
|  |     internalID: 0 | ||||||
|  |     vertices: [] | ||||||
|  |     indices:  | ||||||
|  |     edges: [] | ||||||
|  |     weights: [] | ||||||
|  |     secondaryTextures: [] | ||||||
|  |   spritePackingTag:  | ||||||
|  |   pSDRemoveMatte: 0 | ||||||
|  |   pSDShowRemoveMatteOption: 1 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 744 B | 
|  | @ -0,0 +1,133 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 9988fb1149ca649a8a6b1a61adacdf99 | ||||||
|  | TextureImporter: | ||||||
|  |   internalIDToNameTable: [] | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   mipmaps: | ||||||
|  |     mipMapMode: 0 | ||||||
|  |     enableMipMap: 0 | ||||||
|  |     sRGBTexture: 1 | ||||||
|  |     linearTexture: 0 | ||||||
|  |     fadeOut: 0 | ||||||
|  |     borderMipMap: 0 | ||||||
|  |     mipMapsPreserveCoverage: 0 | ||||||
|  |     alphaTestReferenceValue: 0.5 | ||||||
|  |     mipMapFadeDistanceStart: 1 | ||||||
|  |     mipMapFadeDistanceEnd: 3 | ||||||
|  |   bumpmap: | ||||||
|  |     convertToNormalMap: 0 | ||||||
|  |     externalNormalMap: 0 | ||||||
|  |     heightScale: 0.25 | ||||||
|  |     normalMapFilter: 0 | ||||||
|  |   isReadable: 0 | ||||||
|  |   streamingMipmaps: 0 | ||||||
|  |   streamingMipmapsPriority: 0 | ||||||
|  |   vTOnly: 0 | ||||||
|  |   grayScaleToAlpha: 0 | ||||||
|  |   generateCubemap: 6 | ||||||
|  |   cubemapConvolution: 0 | ||||||
|  |   seamlessCubemap: 0 | ||||||
|  |   textureFormat: 1 | ||||||
|  |   maxTextureSize: 2048 | ||||||
|  |   textureSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     filterMode: 1 | ||||||
|  |     aniso: 1 | ||||||
|  |     mipBias: 0 | ||||||
|  |     wrapU: 1 | ||||||
|  |     wrapV: 1 | ||||||
|  |     wrapW: 1 | ||||||
|  |   nPOTScale: 0 | ||||||
|  |   lightmap: 0 | ||||||
|  |   compressionQuality: 50 | ||||||
|  |   spriteMode: 1 | ||||||
|  |   spriteExtrude: 1 | ||||||
|  |   spriteMeshType: 0 | ||||||
|  |   alignment: 0 | ||||||
|  |   spritePivot: {x: 0.5, y: 0.5} | ||||||
|  |   spritePixelsToUnits: 100 | ||||||
|  |   spriteBorder: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   spriteGenerateFallbackPhysicsShape: 1 | ||||||
|  |   alphaUsage: 1 | ||||||
|  |   alphaIsTransparency: 1 | ||||||
|  |   spriteTessellationDetail: -1 | ||||||
|  |   textureType: 8 | ||||||
|  |   textureShape: 1 | ||||||
|  |   singleChannelComponent: 0 | ||||||
|  |   flipbookRows: 1 | ||||||
|  |   flipbookColumns: 1 | ||||||
|  |   maxTextureSizeSet: 0 | ||||||
|  |   compressionQualitySet: 0 | ||||||
|  |   textureFormatSet: 0 | ||||||
|  |   ignorePngGamma: 0 | ||||||
|  |   applyGammaDecoding: 0 | ||||||
|  |   cookieLightType: 0 | ||||||
|  |   platformSettings: | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: DefaultTexturePlatform | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Standalone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: iPhone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Android | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   spriteSheet: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     sprites: [] | ||||||
|  |     outline: [] | ||||||
|  |     physicsShape: [] | ||||||
|  |     bones: [] | ||||||
|  |     spriteID: 5e97eb03825dee720800000000000000 | ||||||
|  |     internalID: 0 | ||||||
|  |     vertices: [] | ||||||
|  |     indices:  | ||||||
|  |     edges: [] | ||||||
|  |     weights: [] | ||||||
|  |     secondaryTextures: [] | ||||||
|  |   spritePackingTag:  | ||||||
|  |   pSDRemoveMatte: 0 | ||||||
|  |   pSDShowRemoveMatteOption: 0 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 33 KiB | 
|  | @ -0,0 +1,133 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 40351ab8256da4bf68e3103b0b9a3264 | ||||||
|  | TextureImporter: | ||||||
|  |   internalIDToNameTable: [] | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   mipmaps: | ||||||
|  |     mipMapMode: 0 | ||||||
|  |     enableMipMap: 1 | ||||||
|  |     sRGBTexture: 1 | ||||||
|  |     linearTexture: 0 | ||||||
|  |     fadeOut: 0 | ||||||
|  |     borderMipMap: 0 | ||||||
|  |     mipMapsPreserveCoverage: 0 | ||||||
|  |     alphaTestReferenceValue: 0.5 | ||||||
|  |     mipMapFadeDistanceStart: 1 | ||||||
|  |     mipMapFadeDistanceEnd: 3 | ||||||
|  |   bumpmap: | ||||||
|  |     convertToNormalMap: 0 | ||||||
|  |     externalNormalMap: 0 | ||||||
|  |     heightScale: 0.25 | ||||||
|  |     normalMapFilter: 0 | ||||||
|  |   isReadable: 0 | ||||||
|  |   streamingMipmaps: 0 | ||||||
|  |   streamingMipmapsPriority: 0 | ||||||
|  |   vTOnly: 0 | ||||||
|  |   grayScaleToAlpha: 0 | ||||||
|  |   generateCubemap: 6 | ||||||
|  |   cubemapConvolution: 0 | ||||||
|  |   seamlessCubemap: 0 | ||||||
|  |   textureFormat: 1 | ||||||
|  |   maxTextureSize: 2048 | ||||||
|  |   textureSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     filterMode: 1 | ||||||
|  |     aniso: 1 | ||||||
|  |     mipBias: 0 | ||||||
|  |     wrapU: 0 | ||||||
|  |     wrapV: 0 | ||||||
|  |     wrapW: 0 | ||||||
|  |   nPOTScale: 0 | ||||||
|  |   lightmap: 0 | ||||||
|  |   compressionQuality: 50 | ||||||
|  |   spriteMode: 1 | ||||||
|  |   spriteExtrude: 1 | ||||||
|  |   spriteMeshType: 0 | ||||||
|  |   alignment: 0 | ||||||
|  |   spritePivot: {x: 0.5, y: 0.5} | ||||||
|  |   spritePixelsToUnits: 100 | ||||||
|  |   spriteBorder: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   spriteGenerateFallbackPhysicsShape: 1 | ||||||
|  |   alphaUsage: 1 | ||||||
|  |   alphaIsTransparency: 1 | ||||||
|  |   spriteTessellationDetail: -1 | ||||||
|  |   textureType: 8 | ||||||
|  |   textureShape: 1 | ||||||
|  |   singleChannelComponent: 0 | ||||||
|  |   flipbookRows: 1 | ||||||
|  |   flipbookColumns: 1 | ||||||
|  |   maxTextureSizeSet: 0 | ||||||
|  |   compressionQualitySet: 0 | ||||||
|  |   textureFormatSet: 0 | ||||||
|  |   ignorePngGamma: 0 | ||||||
|  |   applyGammaDecoding: 0 | ||||||
|  |   cookieLightType: 0 | ||||||
|  |   platformSettings: | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: DefaultTexturePlatform | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Standalone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: iPhone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Android | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   spriteSheet: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     sprites: [] | ||||||
|  |     outline: [] | ||||||
|  |     physicsShape: [] | ||||||
|  |     bones: [] | ||||||
|  |     spriteID: 5e97eb03825dee720800000000000000 | ||||||
|  |     internalID: 0 | ||||||
|  |     vertices: [] | ||||||
|  |     indices:  | ||||||
|  |     edges: [] | ||||||
|  |     weights: [] | ||||||
|  |     secondaryTextures: [] | ||||||
|  |   spritePackingTag:  | ||||||
|  |   pSDRemoveMatte: 0 | ||||||
|  |   pSDShowRemoveMatteOption: 0 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.5 KiB | 
|  | @ -0,0 +1,133 @@ | ||||||
|  | fileFormatVersion: 2 | ||||||
|  | guid: 16b5786e532ea42f69513fef4f76d6f9 | ||||||
|  | TextureImporter: | ||||||
|  |   internalIDToNameTable: [] | ||||||
|  |   externalObjects: {} | ||||||
|  |   serializedVersion: 12 | ||||||
|  |   mipmaps: | ||||||
|  |     mipMapMode: 0 | ||||||
|  |     enableMipMap: 0 | ||||||
|  |     sRGBTexture: 1 | ||||||
|  |     linearTexture: 0 | ||||||
|  |     fadeOut: 0 | ||||||
|  |     borderMipMap: 0 | ||||||
|  |     mipMapsPreserveCoverage: 0 | ||||||
|  |     alphaTestReferenceValue: 0.5 | ||||||
|  |     mipMapFadeDistanceStart: 1 | ||||||
|  |     mipMapFadeDistanceEnd: 3 | ||||||
|  |   bumpmap: | ||||||
|  |     convertToNormalMap: 0 | ||||||
|  |     externalNormalMap: 0 | ||||||
|  |     heightScale: 0.25 | ||||||
|  |     normalMapFilter: 0 | ||||||
|  |   isReadable: 0 | ||||||
|  |   streamingMipmaps: 0 | ||||||
|  |   streamingMipmapsPriority: 0 | ||||||
|  |   vTOnly: 0 | ||||||
|  |   grayScaleToAlpha: 0 | ||||||
|  |   generateCubemap: 6 | ||||||
|  |   cubemapConvolution: 0 | ||||||
|  |   seamlessCubemap: 0 | ||||||
|  |   textureFormat: 1 | ||||||
|  |   maxTextureSize: 2048 | ||||||
|  |   textureSettings: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     filterMode: 1 | ||||||
|  |     aniso: 1 | ||||||
|  |     mipBias: 0 | ||||||
|  |     wrapU: 1 | ||||||
|  |     wrapV: 1 | ||||||
|  |     wrapW: 1 | ||||||
|  |   nPOTScale: 0 | ||||||
|  |   lightmap: 0 | ||||||
|  |   compressionQuality: 50 | ||||||
|  |   spriteMode: 1 | ||||||
|  |   spriteExtrude: 1 | ||||||
|  |   spriteMeshType: 0 | ||||||
|  |   alignment: 0 | ||||||
|  |   spritePivot: {x: 0.5, y: 0.5} | ||||||
|  |   spritePixelsToUnits: 100 | ||||||
|  |   spriteBorder: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   spriteGenerateFallbackPhysicsShape: 1 | ||||||
|  |   alphaUsage: 1 | ||||||
|  |   alphaIsTransparency: 1 | ||||||
|  |   spriteTessellationDetail: -1 | ||||||
|  |   textureType: 8 | ||||||
|  |   textureShape: 1 | ||||||
|  |   singleChannelComponent: 0 | ||||||
|  |   flipbookRows: 1 | ||||||
|  |   flipbookColumns: 1 | ||||||
|  |   maxTextureSizeSet: 0 | ||||||
|  |   compressionQualitySet: 0 | ||||||
|  |   textureFormatSet: 0 | ||||||
|  |   ignorePngGamma: 0 | ||||||
|  |   applyGammaDecoding: 0 | ||||||
|  |   cookieLightType: 0 | ||||||
|  |   platformSettings: | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: DefaultTexturePlatform | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Standalone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: iPhone | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   - serializedVersion: 3 | ||||||
|  |     buildTarget: Android | ||||||
|  |     maxTextureSize: 2048 | ||||||
|  |     resizeAlgorithm: 0 | ||||||
|  |     textureFormat: -1 | ||||||
|  |     textureCompression: 1 | ||||||
|  |     compressionQuality: 50 | ||||||
|  |     crunchedCompression: 0 | ||||||
|  |     allowsAlphaSplitting: 0 | ||||||
|  |     overridden: 0 | ||||||
|  |     androidETC2FallbackOverride: 0 | ||||||
|  |     forceMaximumCompressionQuality_BC6H_BC7: 0 | ||||||
|  |   spriteSheet: | ||||||
|  |     serializedVersion: 2 | ||||||
|  |     sprites: [] | ||||||
|  |     outline: [] | ||||||
|  |     physicsShape: [] | ||||||
|  |     bones: [] | ||||||
|  |     spriteID: 5e97eb03825dee720800000000000000 | ||||||
|  |     internalID: 0 | ||||||
|  |     vertices: [] | ||||||
|  |     indices:  | ||||||
|  |     edges: [] | ||||||
|  |     weights: [] | ||||||
|  |     secondaryTextures: [] | ||||||
|  |   spritePackingTag:  | ||||||
|  |   pSDRemoveMatte: 0 | ||||||
|  |   pSDShowRemoveMatteOption: 0 | ||||||
|  |   userData:  | ||||||
|  |   assetBundleName:  | ||||||
|  |   assetBundleVariant:  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue