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