├── .gitattributes
├── Readme.md
├── Readme.md.meta
├── Resources.meta
├── Resources
├── ResFonts.meta
├── ResFonts
│ ├── SourceHanSans-Light-Lite SDF.asset
│ ├── SourceHanSans-Light-Lite SDF.asset.meta
│ ├── SourceHanSans-Light-Lite.ttf
│ └── SourceHanSans-Light-Lite.ttf.meta
├── ResPrefabs.meta
├── ResPrefabs
│ ├── HotFixBG.prefab
│ ├── HotFixBG.prefab.meta
│ ├── HotFixPanel.prefab
│ ├── HotFixPanel.prefab.meta
│ ├── HotFixProgressPanel.prefab
│ ├── HotFixProgressPanel.prefab.meta
│ ├── SangoPatchRoot.prefab
│ └── SangoPatchRoot.prefab.meta
├── ResSprites.meta
└── ResSprites
│ ├── Gcg_Loading_Bg2.png
│ ├── Gcg_Loading_Bg2.png.meta
│ ├── UI_FleurFairDungeon_Btn_Bg.png
│ ├── UI_FleurFairDungeon_Btn_Bg.png.meta
│ ├── UI_Frm_FungusFighter_Puzzle_Card.png
│ ├── UI_Frm_FungusFighter_Puzzle_Card.png.meta
│ ├── UI_Img_CoopChapter_2.png
│ ├── UI_Img_CoopChapter_2.png.meta
│ ├── UI_Img_CoopChapter_3.png
│ ├── UI_Img_CoopChapter_3.png.meta
│ ├── UI_Irodori_Stage_Btn_Shadow.png
│ └── UI_Irodori_Stage_Btn_Shadow.png.meta
├── Scripts.meta
├── Scripts
├── Editor.meta
├── Editor
│ ├── Encryption.cs
│ ├── Encryption.cs.meta
│ ├── SangoUtils_Patch_YooAsset.Editor.asmdef
│ └── SangoUtils_Patch_YooAsset.Editor.asmdef.meta
├── Runtime.meta
└── Runtime
│ ├── PatchOperationOP.meta
│ ├── PatchOperationOP
│ ├── PatchOperationOP_ClearPackageCache.cs
│ ├── PatchOperationOP_ClearPackageCache.cs.meta
│ ├── PatchOperationOP_CreatePackageDownloader.cs
│ ├── PatchOperationOP_CreatePackageDownloader.cs.meta
│ ├── PatchOperationOP_DownloadPackageFiles.cs
│ ├── PatchOperationOP_DownloadPackageFiles.cs.meta
│ ├── PatchOperationOP_DownloadPackageOver.cs
│ ├── PatchOperationOP_DownloadPackageOver.cs.meta
│ ├── PatchOperationOP_InitializePackage.cs
│ ├── PatchOperationOP_InitializePackage.cs.meta
│ ├── PatchOperationOP_UpdateLoadHotfixDll.cs
│ ├── PatchOperationOP_UpdateLoadHotfixDll.cs.meta
│ ├── PatchOperationOP_UpdatePackageManifest.cs
│ ├── PatchOperationOP_UpdatePackageManifest.cs.meta
│ ├── PatchOperationOP_UpdatePackageVersion.cs
│ ├── PatchOperationOP_UpdatePackageVersion.cs.meta
│ ├── PatchOperationOP_UpdaterDone.cs
│ └── PatchOperationOP_UpdaterDone.cs.meta
│ ├── PatchService.meta
│ ├── PatchService
│ ├── EventBus_Patchs.cs
│ ├── EventBus_Patchs.cs.meta
│ ├── PatchOperation.cs
│ ├── PatchOperation.cs.meta
│ ├── PatchService.cs
│ ├── PatchService.cs.meta
│ ├── PatchSystemEventMessages.cs
│ └── PatchSystemEventMessages.cs.meta
│ ├── PublicAssets.meta
│ ├── PublicAssets
│ ├── SangoAssetService.cs
│ ├── SangoAssetService.cs.meta
│ ├── SangoPatchConfig.cs
│ ├── SangoPatchConfig.cs.meta
│ ├── SangoPatchRoot.cs
│ ├── SangoPatchRoot.cs.meta
│ ├── SangoPatchWnd.cs
│ └── SangoPatchWnd.cs.meta
│ ├── SangoUtils_Patch_YooAsset.Runtime.asmdef
│ ├── SangoUtils_Patch_YooAsset.Runtime.asmdef.meta
│ ├── StreamingAssetsHelper.meta
│ ├── StreamingAssetsHelper
│ ├── BuildinFileManifest.cs
│ ├── BuildinFileManifest.cs.meta
│ ├── StreamingAssetsDefine.cs
│ ├── StreamingAssetsDefine.cs.meta
│ ├── StreamingAssetsHelper.cs
│ ├── StreamingAssetsHelper.cs.meta
│ ├── StreamingAssetsHelper2.cs
│ └── StreamingAssetsHelper2.cs.meta
│ ├── Utils.meta
│ └── Utils
│ ├── CoroutineDriver.cs
│ ├── CoroutineDriver.cs.meta
│ ├── CoroutineHandler.cs
│ ├── CoroutineHandler.cs.meta
│ ├── Coroutines.cs
│ └── Coroutines.cs.meta
├── package.json
└── package.json.meta
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | # SangoUtils.Hotfix_YooAsset
2 |
3 | 描述:这是一个非常简单的 Yooasset + HybridCLR 最小化的热更新系统,内含资源加载模块,热更dll加载,高性能EventBus,易拓展的Fsm,傻瓜式开箱即用,零基础小白也能轻松上手,快来试试为你的项目接入第一个热更新吧 >_< ...
4 |
5 |
6 |
7 | 依赖的package:[YooAsset](https://www.yooasset.com/)、[HybridCLR](https://hybridclr.doc.code-philosophy.com/)
8 |
9 |
10 |
11 | 开发者:[SangonomiyaSakunovi](https://github.com/SangonomiyaSakunovi/)、[Gaolingx](https://github.com/Gaolingx/)
--------------------------------------------------------------------------------
/Readme.md.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c84e02221e618894290ff1539670f9e9
3 | TextScriptImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Resources.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f5b5fe5620f0c4b4a94d273f8023e434
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Resources/ResFonts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 30bd050cdfce174488ceadf213390ac9
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Resources/ResFonts/SourceHanSans-Light-Lite SDF.asset.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 36f8019232867c646b9cbdff7658e2e6
3 | NativeFormatImporter:
4 | externalObjects: {}
5 | mainObjectFileID: 0
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Resources/ResFonts/SourceHanSans-Light-Lite.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResFonts/SourceHanSans-Light-Lite.ttf
--------------------------------------------------------------------------------
/Resources/ResFonts/SourceHanSans-Light-Lite.ttf.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3bea8d59d44a14e4182e3ab8982dac0a
3 | TrueTypeFontImporter:
4 | externalObjects: {}
5 | serializedVersion: 4
6 | fontSize: 16
7 | forceTextureCase: -2
8 | characterSpacing: 0
9 | characterPadding: 1
10 | includeFontData: 1
11 | fontNames:
12 | - HYWenHei
13 | fallbackFontReferences: []
14 | customCharacters:
15 | fontRenderingMode: 0
16 | ascentCalculationMode: 1
17 | useLegacyBoundsCalculation: 0
18 | shouldRoundAdvanceValue: 1
19 | userData:
20 | assetBundleName:
21 | assetBundleVariant:
22 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: da687b264005fdd4db2723bd100f6a8d
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixBG.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &1664767977149602139
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 745676617468238462}
12 | - component: {fileID: 2115519686466721638}
13 | - component: {fileID: 2020393096904101426}
14 | m_Layer: 0
15 | m_Name: HotFixBG
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!224 &745676617468238462
22 | RectTransform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 1664767977149602139}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_ConstrainProportionsScale: 0
32 | m_Children: []
33 | m_Father: {fileID: 0}
34 | m_RootOrder: -1
35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36 | m_AnchorMin: {x: 0.5, y: 0.5}
37 | m_AnchorMax: {x: 0.5, y: 0.5}
38 | m_AnchoredPosition: {x: 0, y: -0.00018310547}
39 | m_SizeDelta: {x: 2880, y: 1620}
40 | m_Pivot: {x: 0.5, y: 0.5}
41 | --- !u!222 &2115519686466721638
42 | CanvasRenderer:
43 | m_ObjectHideFlags: 0
44 | m_CorrespondingSourceObject: {fileID: 0}
45 | m_PrefabInstance: {fileID: 0}
46 | m_PrefabAsset: {fileID: 0}
47 | m_GameObject: {fileID: 1664767977149602139}
48 | m_CullTransparentMesh: 1
49 | --- !u!114 &2020393096904101426
50 | MonoBehaviour:
51 | m_ObjectHideFlags: 0
52 | m_CorrespondingSourceObject: {fileID: 0}
53 | m_PrefabInstance: {fileID: 0}
54 | m_PrefabAsset: {fileID: 0}
55 | m_GameObject: {fileID: 1664767977149602139}
56 | m_Enabled: 1
57 | m_EditorHideFlags: 0
58 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
59 | m_Name:
60 | m_EditorClassIdentifier:
61 | m_Material: {fileID: 0}
62 | m_Color: {r: 1, g: 1, b: 1, a: 1}
63 | m_RaycastTarget: 1
64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
65 | m_Maskable: 1
66 | m_OnCullStateChanged:
67 | m_PersistentCalls:
68 | m_Calls: []
69 | m_Sprite: {fileID: 21300000, guid: 0bb95d0c6588ec441b3543f6b7e71753, type: 3}
70 | m_Type: 0
71 | m_PreserveAspect: 0
72 | m_FillCenter: 1
73 | m_FillMethod: 4
74 | m_FillAmount: 1
75 | m_FillClockwise: 1
76 | m_FillOrigin: 0
77 | m_UseSpriteMesh: 0
78 | m_PixelsPerUnitMultiplier: 1
79 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixBG.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1dc08fa7887ec744bba872b6d80d5e69
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixPanel.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &2062804006460076083
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 1934431012300107606}
12 | - component: {fileID: 6907870854739425275}
13 | - component: {fileID: 276632744854682654}
14 | m_Layer: 0
15 | m_Name: FG
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!224 &1934431012300107606
22 | RectTransform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 2062804006460076083}
28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_ConstrainProportionsScale: 1
32 | m_Children: []
33 | m_Father: {fileID: 1207478930461614546}
34 | m_RootOrder: 0
35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36 | m_AnchorMin: {x: 0.5, y: 0.5}
37 | m_AnchorMax: {x: 0.5, y: 0.5}
38 | m_AnchoredPosition: {x: 0, y: -0.00018310547}
39 | m_SizeDelta: {x: 702, y: 432}
40 | m_Pivot: {x: 0.5, y: 0.5}
41 | --- !u!222 &6907870854739425275
42 | CanvasRenderer:
43 | m_ObjectHideFlags: 0
44 | m_CorrespondingSourceObject: {fileID: 0}
45 | m_PrefabInstance: {fileID: 0}
46 | m_PrefabAsset: {fileID: 0}
47 | m_GameObject: {fileID: 2062804006460076083}
48 | m_CullTransparentMesh: 1
49 | --- !u!114 &276632744854682654
50 | MonoBehaviour:
51 | m_ObjectHideFlags: 0
52 | m_CorrespondingSourceObject: {fileID: 0}
53 | m_PrefabInstance: {fileID: 0}
54 | m_PrefabAsset: {fileID: 0}
55 | m_GameObject: {fileID: 2062804006460076083}
56 | m_Enabled: 1
57 | m_EditorHideFlags: 0
58 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
59 | m_Name:
60 | m_EditorClassIdentifier:
61 | m_Material: {fileID: 0}
62 | m_Color: {r: 1, g: 1, b: 1, a: 1}
63 | m_RaycastTarget: 1
64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
65 | m_Maskable: 1
66 | m_OnCullStateChanged:
67 | m_PersistentCalls:
68 | m_Calls: []
69 | m_Sprite: {fileID: 21300000, guid: ffd84c53b30ff6241b86cdbfa0869535, type: 3}
70 | m_Type: 0
71 | m_PreserveAspect: 0
72 | m_FillCenter: 1
73 | m_FillMethod: 4
74 | m_FillAmount: 1
75 | m_FillClockwise: 1
76 | m_FillOrigin: 0
77 | m_UseSpriteMesh: 0
78 | m_PixelsPerUnitMultiplier: 1
79 | --- !u!1 &5708124217928493552
80 | GameObject:
81 | m_ObjectHideFlags: 0
82 | m_CorrespondingSourceObject: {fileID: 0}
83 | m_PrefabInstance: {fileID: 0}
84 | m_PrefabAsset: {fileID: 0}
85 | serializedVersion: 6
86 | m_Component:
87 | - component: {fileID: 5027231467456007612}
88 | - component: {fileID: 1443664839497919927}
89 | - component: {fileID: 8913426244291340062}
90 | m_Layer: 0
91 | m_Name: Text (TMP)
92 | m_TagString: Untagged
93 | m_Icon: {fileID: 0}
94 | m_NavMeshLayer: 0
95 | m_StaticEditorFlags: 0
96 | m_IsActive: 1
97 | --- !u!224 &5027231467456007612
98 | RectTransform:
99 | m_ObjectHideFlags: 0
100 | m_CorrespondingSourceObject: {fileID: 0}
101 | m_PrefabInstance: {fileID: 0}
102 | m_PrefabAsset: {fileID: 0}
103 | m_GameObject: {fileID: 5708124217928493552}
104 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
105 | m_LocalPosition: {x: 0, y: 0, z: 0}
106 | m_LocalScale: {x: 1, y: 1, z: 1}
107 | m_ConstrainProportionsScale: 0
108 | m_Children: []
109 | m_Father: {fileID: 7481939872184001411}
110 | m_RootOrder: 0
111 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
112 | m_AnchorMin: {x: 0.5, y: 0.5}
113 | m_AnchorMax: {x: 0.5, y: 0.5}
114 | m_AnchoredPosition: {x: 0, y: 0}
115 | m_SizeDelta: {x: 200, y: 50}
116 | m_Pivot: {x: 0.5, y: 0.5}
117 | --- !u!222 &1443664839497919927
118 | CanvasRenderer:
119 | m_ObjectHideFlags: 0
120 | m_CorrespondingSourceObject: {fileID: 0}
121 | m_PrefabInstance: {fileID: 0}
122 | m_PrefabAsset: {fileID: 0}
123 | m_GameObject: {fileID: 5708124217928493552}
124 | m_CullTransparentMesh: 1
125 | --- !u!114 &8913426244291340062
126 | MonoBehaviour:
127 | m_ObjectHideFlags: 0
128 | m_CorrespondingSourceObject: {fileID: 0}
129 | m_PrefabInstance: {fileID: 0}
130 | m_PrefabAsset: {fileID: 0}
131 | m_GameObject: {fileID: 5708124217928493552}
132 | m_Enabled: 1
133 | m_EditorHideFlags: 0
134 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
135 | m_Name:
136 | m_EditorClassIdentifier:
137 | m_Material: {fileID: 0}
138 | m_Color: {r: 1, g: 1, b: 1, a: 1}
139 | m_RaycastTarget: 1
140 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
141 | m_Maskable: 1
142 | m_OnCullStateChanged:
143 | m_PersistentCalls:
144 | m_Calls: []
145 | m_text: "\u53D6\u6D88"
146 | m_isRightToLeft: 0
147 | m_fontAsset: {fileID: 11400000, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
148 | m_sharedMaterial: {fileID: -6767376747244427359, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
149 | m_fontSharedMaterials: []
150 | m_fontMaterial: {fileID: 0}
151 | m_fontMaterials: []
152 | m_fontColor32:
153 | serializedVersion: 2
154 | rgba: 4294967295
155 | m_fontColor: {r: 1, g: 1, b: 1, a: 1}
156 | m_enableVertexGradient: 0
157 | m_colorMode: 3
158 | m_fontColorGradient:
159 | topLeft: {r: 1, g: 1, b: 1, a: 1}
160 | topRight: {r: 1, g: 1, b: 1, a: 1}
161 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
162 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
163 | m_fontColorGradientPreset: {fileID: 0}
164 | m_spriteAsset: {fileID: 0}
165 | m_tintAllSprites: 0
166 | m_StyleSheet: {fileID: 0}
167 | m_TextStyleHashCode: -1183493901
168 | m_overrideHtmlColors: 0
169 | m_faceColor:
170 | serializedVersion: 2
171 | rgba: 4294967295
172 | m_fontSize: 40
173 | m_fontSizeBase: 40
174 | m_fontWeight: 400
175 | m_enableAutoSizing: 0
176 | m_fontSizeMin: 18
177 | m_fontSizeMax: 72
178 | m_fontStyle: 0
179 | m_HorizontalAlignment: 2
180 | m_VerticalAlignment: 512
181 | m_textAlignment: 65535
182 | m_characterSpacing: 0
183 | m_wordSpacing: 0
184 | m_lineSpacing: 0
185 | m_lineSpacingMax: 0
186 | m_paragraphSpacing: 0
187 | m_charWidthMaxAdj: 0
188 | m_enableWordWrapping: 1
189 | m_wordWrappingRatios: 0.4
190 | m_overflowMode: 0
191 | m_linkedTextComponent: {fileID: 0}
192 | parentLinkedComponent: {fileID: 0}
193 | m_enableKerning: 1
194 | m_enableExtraPadding: 0
195 | checkPaddingRequired: 0
196 | m_isRichText: 1
197 | m_parseCtrlCharacters: 1
198 | m_isOrthographic: 1
199 | m_isCullingEnabled: 0
200 | m_horizontalMapping: 0
201 | m_verticalMapping: 0
202 | m_uvLineOffset: 0
203 | m_geometrySortingOrder: 0
204 | m_IsTextObjectScaleStatic: 0
205 | m_VertexBufferAutoSizeReduction: 0
206 | m_useMaxVisibleDescender: 1
207 | m_pageToDisplay: 1
208 | m_margin: {x: 0, y: 0, z: 0, w: 0}
209 | m_isUsingLegacyAnimationComponent: 0
210 | m_isVolumetricText: 0
211 | m_hasFontAssetChanged: 0
212 | m_baseMaterial: {fileID: 0}
213 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
214 | --- !u!1 &6603183931383041623
215 | GameObject:
216 | m_ObjectHideFlags: 0
217 | m_CorrespondingSourceObject: {fileID: 0}
218 | m_PrefabInstance: {fileID: 0}
219 | m_PrefabAsset: {fileID: 0}
220 | serializedVersion: 6
221 | m_Component:
222 | - component: {fileID: 301700780943507501}
223 | - component: {fileID: 7289020286260905607}
224 | - component: {fileID: 7896341444496019375}
225 | m_Layer: 0
226 | m_Name: Text (TMP)
227 | m_TagString: Untagged
228 | m_Icon: {fileID: 0}
229 | m_NavMeshLayer: 0
230 | m_StaticEditorFlags: 0
231 | m_IsActive: 1
232 | --- !u!224 &301700780943507501
233 | RectTransform:
234 | m_ObjectHideFlags: 0
235 | m_CorrespondingSourceObject: {fileID: 0}
236 | m_PrefabInstance: {fileID: 0}
237 | m_PrefabAsset: {fileID: 0}
238 | m_GameObject: {fileID: 6603183931383041623}
239 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
240 | m_LocalPosition: {x: 0, y: 0, z: 0}
241 | m_LocalScale: {x: 1, y: 1, z: 1}
242 | m_ConstrainProportionsScale: 0
243 | m_Children: []
244 | m_Father: {fileID: 5110140089658016847}
245 | m_RootOrder: 0
246 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
247 | m_AnchorMin: {x: 0.5, y: 0.5}
248 | m_AnchorMax: {x: 0.5, y: 0.5}
249 | m_AnchoredPosition: {x: 0, y: 0}
250 | m_SizeDelta: {x: 200, y: 50}
251 | m_Pivot: {x: 0.5, y: 0.5}
252 | --- !u!222 &7289020286260905607
253 | CanvasRenderer:
254 | m_ObjectHideFlags: 0
255 | m_CorrespondingSourceObject: {fileID: 0}
256 | m_PrefabInstance: {fileID: 0}
257 | m_PrefabAsset: {fileID: 0}
258 | m_GameObject: {fileID: 6603183931383041623}
259 | m_CullTransparentMesh: 1
260 | --- !u!114 &7896341444496019375
261 | MonoBehaviour:
262 | m_ObjectHideFlags: 0
263 | m_CorrespondingSourceObject: {fileID: 0}
264 | m_PrefabInstance: {fileID: 0}
265 | m_PrefabAsset: {fileID: 0}
266 | m_GameObject: {fileID: 6603183931383041623}
267 | m_Enabled: 1
268 | m_EditorHideFlags: 0
269 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
270 | m_Name:
271 | m_EditorClassIdentifier:
272 | m_Material: {fileID: 0}
273 | m_Color: {r: 1, g: 1, b: 1, a: 1}
274 | m_RaycastTarget: 1
275 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
276 | m_Maskable: 1
277 | m_OnCullStateChanged:
278 | m_PersistentCalls:
279 | m_Calls: []
280 | m_text: "\u786E\u5B9A"
281 | m_isRightToLeft: 0
282 | m_fontAsset: {fileID: 11400000, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
283 | m_sharedMaterial: {fileID: -6767376747244427359, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
284 | m_fontSharedMaterials: []
285 | m_fontMaterial: {fileID: 0}
286 | m_fontMaterials: []
287 | m_fontColor32:
288 | serializedVersion: 2
289 | rgba: 4294967295
290 | m_fontColor: {r: 1, g: 1, b: 1, a: 1}
291 | m_enableVertexGradient: 0
292 | m_colorMode: 3
293 | m_fontColorGradient:
294 | topLeft: {r: 1, g: 1, b: 1, a: 1}
295 | topRight: {r: 1, g: 1, b: 1, a: 1}
296 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
297 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
298 | m_fontColorGradientPreset: {fileID: 0}
299 | m_spriteAsset: {fileID: 0}
300 | m_tintAllSprites: 0
301 | m_StyleSheet: {fileID: 0}
302 | m_TextStyleHashCode: -1183493901
303 | m_overrideHtmlColors: 0
304 | m_faceColor:
305 | serializedVersion: 2
306 | rgba: 4294967295
307 | m_fontSize: 40
308 | m_fontSizeBase: 40
309 | m_fontWeight: 400
310 | m_enableAutoSizing: 0
311 | m_fontSizeMin: 18
312 | m_fontSizeMax: 72
313 | m_fontStyle: 0
314 | m_HorizontalAlignment: 2
315 | m_VerticalAlignment: 512
316 | m_textAlignment: 65535
317 | m_characterSpacing: 0
318 | m_wordSpacing: 0
319 | m_lineSpacing: 0
320 | m_lineSpacingMax: 0
321 | m_paragraphSpacing: 0
322 | m_charWidthMaxAdj: 0
323 | m_enableWordWrapping: 1
324 | m_wordWrappingRatios: 0.4
325 | m_overflowMode: 0
326 | m_linkedTextComponent: {fileID: 0}
327 | parentLinkedComponent: {fileID: 0}
328 | m_enableKerning: 1
329 | m_enableExtraPadding: 0
330 | checkPaddingRequired: 0
331 | m_isRichText: 1
332 | m_parseCtrlCharacters: 1
333 | m_isOrthographic: 1
334 | m_isCullingEnabled: 0
335 | m_horizontalMapping: 0
336 | m_verticalMapping: 0
337 | m_uvLineOffset: 0
338 | m_geometrySortingOrder: 0
339 | m_IsTextObjectScaleStatic: 0
340 | m_VertexBufferAutoSizeReduction: 0
341 | m_useMaxVisibleDescender: 1
342 | m_pageToDisplay: 1
343 | m_margin: {x: 0, y: 0, z: 0, w: 0}
344 | m_isUsingLegacyAnimationComponent: 0
345 | m_isVolumetricText: 0
346 | m_hasFontAssetChanged: 0
347 | m_baseMaterial: {fileID: 0}
348 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
349 | --- !u!1 &6992564996532325543
350 | GameObject:
351 | m_ObjectHideFlags: 0
352 | m_CorrespondingSourceObject: {fileID: 0}
353 | m_PrefabInstance: {fileID: 0}
354 | m_PrefabAsset: {fileID: 0}
355 | serializedVersion: 6
356 | m_Component:
357 | - component: {fileID: 7481939872184001411}
358 | - component: {fileID: 5145406265175113245}
359 | - component: {fileID: 8913469889496827338}
360 | - component: {fileID: 6191708688828735877}
361 | m_Layer: 0
362 | m_Name: messageBoxCancelBtn
363 | m_TagString: Untagged
364 | m_Icon: {fileID: 0}
365 | m_NavMeshLayer: 0
366 | m_StaticEditorFlags: 0
367 | m_IsActive: 1
368 | --- !u!224 &7481939872184001411
369 | RectTransform:
370 | m_ObjectHideFlags: 0
371 | m_CorrespondingSourceObject: {fileID: 0}
372 | m_PrefabInstance: {fileID: 0}
373 | m_PrefabAsset: {fileID: 0}
374 | m_GameObject: {fileID: 6992564996532325543}
375 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
376 | m_LocalPosition: {x: 0, y: 0, z: 0}
377 | m_LocalScale: {x: 1, y: 1, z: 1}
378 | m_ConstrainProportionsScale: 0
379 | m_Children:
380 | - {fileID: 5027231467456007612}
381 | m_Father: {fileID: 1207478930461614546}
382 | m_RootOrder: 2
383 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
384 | m_AnchorMin: {x: 0.5, y: 0.5}
385 | m_AnchorMax: {x: 0.5, y: 0.5}
386 | m_AnchoredPosition: {x: 150, y: -125.00018}
387 | m_SizeDelta: {x: 200, y: 50}
388 | m_Pivot: {x: 0.5, y: 0.5}
389 | --- !u!222 &5145406265175113245
390 | CanvasRenderer:
391 | m_ObjectHideFlags: 0
392 | m_CorrespondingSourceObject: {fileID: 0}
393 | m_PrefabInstance: {fileID: 0}
394 | m_PrefabAsset: {fileID: 0}
395 | m_GameObject: {fileID: 6992564996532325543}
396 | m_CullTransparentMesh: 1
397 | --- !u!114 &8913469889496827338
398 | MonoBehaviour:
399 | m_ObjectHideFlags: 0
400 | m_CorrespondingSourceObject: {fileID: 0}
401 | m_PrefabInstance: {fileID: 0}
402 | m_PrefabAsset: {fileID: 0}
403 | m_GameObject: {fileID: 6992564996532325543}
404 | m_Enabled: 1
405 | m_EditorHideFlags: 0
406 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
407 | m_Name:
408 | m_EditorClassIdentifier:
409 | m_Material: {fileID: 0}
410 | m_Color: {r: 1, g: 1, b: 1, a: 1}
411 | m_RaycastTarget: 1
412 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
413 | m_Maskable: 1
414 | m_OnCullStateChanged:
415 | m_PersistentCalls:
416 | m_Calls: []
417 | m_Sprite: {fileID: 21300000, guid: bf7e1c548030f47449f2785f995df1ae, type: 3}
418 | m_Type: 1
419 | m_PreserveAspect: 0
420 | m_FillCenter: 1
421 | m_FillMethod: 4
422 | m_FillAmount: 1
423 | m_FillClockwise: 1
424 | m_FillOrigin: 0
425 | m_UseSpriteMesh: 0
426 | m_PixelsPerUnitMultiplier: 2
427 | --- !u!114 &6191708688828735877
428 | MonoBehaviour:
429 | m_ObjectHideFlags: 0
430 | m_CorrespondingSourceObject: {fileID: 0}
431 | m_PrefabInstance: {fileID: 0}
432 | m_PrefabAsset: {fileID: 0}
433 | m_GameObject: {fileID: 6992564996532325543}
434 | m_Enabled: 1
435 | m_EditorHideFlags: 0
436 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
437 | m_Name:
438 | m_EditorClassIdentifier:
439 | m_Navigation:
440 | m_Mode: 3
441 | m_WrapAround: 0
442 | m_SelectOnUp: {fileID: 0}
443 | m_SelectOnDown: {fileID: 0}
444 | m_SelectOnLeft: {fileID: 0}
445 | m_SelectOnRight: {fileID: 0}
446 | m_Transition: 1
447 | m_Colors:
448 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
449 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
450 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
451 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
452 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
453 | m_ColorMultiplier: 1
454 | m_FadeDuration: 0.1
455 | m_SpriteState:
456 | m_HighlightedSprite: {fileID: 0}
457 | m_PressedSprite: {fileID: 0}
458 | m_SelectedSprite: {fileID: 0}
459 | m_DisabledSprite: {fileID: 0}
460 | m_AnimationTriggers:
461 | m_NormalTrigger: Normal
462 | m_HighlightedTrigger: Highlighted
463 | m_PressedTrigger: Pressed
464 | m_SelectedTrigger: Selected
465 | m_DisabledTrigger: Disabled
466 | m_Interactable: 1
467 | m_TargetGraphic: {fileID: 8913469889496827338}
468 | m_OnClick:
469 | m_PersistentCalls:
470 | m_Calls: []
471 | --- !u!1 &8112040730504572910
472 | GameObject:
473 | m_ObjectHideFlags: 0
474 | m_CorrespondingSourceObject: {fileID: 0}
475 | m_PrefabInstance: {fileID: 0}
476 | m_PrefabAsset: {fileID: 0}
477 | serializedVersion: 6
478 | m_Component:
479 | - component: {fileID: 273991638745571060}
480 | - component: {fileID: 3959089209639761331}
481 | - component: {fileID: 3243001873628962870}
482 | m_Layer: 0
483 | m_Name: messageBoxContent
484 | m_TagString: Untagged
485 | m_Icon: {fileID: 0}
486 | m_NavMeshLayer: 0
487 | m_StaticEditorFlags: 0
488 | m_IsActive: 1
489 | --- !u!224 &273991638745571060
490 | RectTransform:
491 | m_ObjectHideFlags: 0
492 | m_CorrespondingSourceObject: {fileID: 0}
493 | m_PrefabInstance: {fileID: 0}
494 | m_PrefabAsset: {fileID: 0}
495 | m_GameObject: {fileID: 8112040730504572910}
496 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
497 | m_LocalPosition: {x: 0, y: 0, z: 0}
498 | m_LocalScale: {x: 1, y: 1, z: 1}
499 | m_ConstrainProportionsScale: 0
500 | m_Children: []
501 | m_Father: {fileID: 1207478930461614546}
502 | m_RootOrder: 3
503 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
504 | m_AnchorMin: {x: 0.5, y: 0.5}
505 | m_AnchorMax: {x: 0.5, y: 0.5}
506 | m_AnchoredPosition: {x: 0, y: 49.999817}
507 | m_SizeDelta: {x: 700, y: 200}
508 | m_Pivot: {x: 0.5, y: 0.5}
509 | --- !u!222 &3959089209639761331
510 | CanvasRenderer:
511 | m_ObjectHideFlags: 0
512 | m_CorrespondingSourceObject: {fileID: 0}
513 | m_PrefabInstance: {fileID: 0}
514 | m_PrefabAsset: {fileID: 0}
515 | m_GameObject: {fileID: 8112040730504572910}
516 | m_CullTransparentMesh: 1
517 | --- !u!114 &3243001873628962870
518 | MonoBehaviour:
519 | m_ObjectHideFlags: 0
520 | m_CorrespondingSourceObject: {fileID: 0}
521 | m_PrefabInstance: {fileID: 0}
522 | m_PrefabAsset: {fileID: 0}
523 | m_GameObject: {fileID: 8112040730504572910}
524 | m_Enabled: 1
525 | m_EditorHideFlags: 0
526 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
527 | m_Name:
528 | m_EditorClassIdentifier:
529 | m_Material: {fileID: 0}
530 | m_Color: {r: 1, g: 1, b: 1, a: 1}
531 | m_RaycastTarget: 1
532 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
533 | m_Maskable: 1
534 | m_OnCullStateChanged:
535 | m_PersistentCalls:
536 | m_Calls: []
537 | m_text: "\u5F53\u524D\u9700\u8981\u4E0B\u8F7D\u66F4\u65B0200MB\u5DE6\u53F3\uFF0C\n\u662F\u5426\u7EE7\u7EED\uFF1F\n\uFF08\u5EFA\u8BAE\u5728Wifi\u73AF\u5883\u4E0B\u8FDB\u884C\uFF09"
538 | m_isRightToLeft: 0
539 | m_fontAsset: {fileID: 11400000, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
540 | m_sharedMaterial: {fileID: -6767376747244427359, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
541 | m_fontSharedMaterials: []
542 | m_fontMaterial: {fileID: 0}
543 | m_fontMaterials: []
544 | m_fontColor32:
545 | serializedVersion: 2
546 | rgba: 4278190080
547 | m_fontColor: {r: 0, g: 0, b: 0, a: 1}
548 | m_enableVertexGradient: 0
549 | m_colorMode: 3
550 | m_fontColorGradient:
551 | topLeft: {r: 1, g: 1, b: 1, a: 1}
552 | topRight: {r: 1, g: 1, b: 1, a: 1}
553 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
554 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
555 | m_fontColorGradientPreset: {fileID: 0}
556 | m_spriteAsset: {fileID: 0}
557 | m_tintAllSprites: 0
558 | m_StyleSheet: {fileID: 0}
559 | m_TextStyleHashCode: -1183493901
560 | m_overrideHtmlColors: 0
561 | m_faceColor:
562 | serializedVersion: 2
563 | rgba: 4294967295
564 | m_fontSize: 40
565 | m_fontSizeBase: 40
566 | m_fontWeight: 400
567 | m_enableAutoSizing: 0
568 | m_fontSizeMin: 18
569 | m_fontSizeMax: 72
570 | m_fontStyle: 0
571 | m_HorizontalAlignment: 2
572 | m_VerticalAlignment: 512
573 | m_textAlignment: 65535
574 | m_characterSpacing: 0
575 | m_wordSpacing: 0
576 | m_lineSpacing: 0
577 | m_lineSpacingMax: 0
578 | m_paragraphSpacing: 0
579 | m_charWidthMaxAdj: 0
580 | m_enableWordWrapping: 1
581 | m_wordWrappingRatios: 0.4
582 | m_overflowMode: 0
583 | m_linkedTextComponent: {fileID: 0}
584 | parentLinkedComponent: {fileID: 0}
585 | m_enableKerning: 1
586 | m_enableExtraPadding: 0
587 | checkPaddingRequired: 0
588 | m_isRichText: 1
589 | m_parseCtrlCharacters: 1
590 | m_isOrthographic: 1
591 | m_isCullingEnabled: 0
592 | m_horizontalMapping: 0
593 | m_verticalMapping: 0
594 | m_uvLineOffset: 0
595 | m_geometrySortingOrder: 0
596 | m_IsTextObjectScaleStatic: 0
597 | m_VertexBufferAutoSizeReduction: 0
598 | m_useMaxVisibleDescender: 1
599 | m_pageToDisplay: 1
600 | m_margin: {x: 0, y: 0, z: 0, w: 0}
601 | m_isUsingLegacyAnimationComponent: 0
602 | m_isVolumetricText: 0
603 | m_hasFontAssetChanged: 0
604 | m_baseMaterial: {fileID: 0}
605 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
606 | --- !u!1 &8175407354174167579
607 | GameObject:
608 | m_ObjectHideFlags: 0
609 | m_CorrespondingSourceObject: {fileID: 0}
610 | m_PrefabInstance: {fileID: 0}
611 | m_PrefabAsset: {fileID: 0}
612 | serializedVersion: 6
613 | m_Component:
614 | - component: {fileID: 5110140089658016847}
615 | - component: {fileID: 2313898266406245880}
616 | - component: {fileID: 4414436773456965150}
617 | - component: {fileID: 6268533488412776771}
618 | m_Layer: 0
619 | m_Name: messageBoxOkBtn
620 | m_TagString: Untagged
621 | m_Icon: {fileID: 0}
622 | m_NavMeshLayer: 0
623 | m_StaticEditorFlags: 0
624 | m_IsActive: 1
625 | --- !u!224 &5110140089658016847
626 | RectTransform:
627 | m_ObjectHideFlags: 0
628 | m_CorrespondingSourceObject: {fileID: 0}
629 | m_PrefabInstance: {fileID: 0}
630 | m_PrefabAsset: {fileID: 0}
631 | m_GameObject: {fileID: 8175407354174167579}
632 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
633 | m_LocalPosition: {x: 0, y: 0, z: 0}
634 | m_LocalScale: {x: 1, y: 1, z: 1}
635 | m_ConstrainProportionsScale: 0
636 | m_Children:
637 | - {fileID: 301700780943507501}
638 | m_Father: {fileID: 1207478930461614546}
639 | m_RootOrder: 1
640 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
641 | m_AnchorMin: {x: 0.5, y: 0.5}
642 | m_AnchorMax: {x: 0.5, y: 0.5}
643 | m_AnchoredPosition: {x: -150, y: -125.00018}
644 | m_SizeDelta: {x: 200, y: 50}
645 | m_Pivot: {x: 0.5, y: 0.5}
646 | --- !u!222 &2313898266406245880
647 | CanvasRenderer:
648 | m_ObjectHideFlags: 0
649 | m_CorrespondingSourceObject: {fileID: 0}
650 | m_PrefabInstance: {fileID: 0}
651 | m_PrefabAsset: {fileID: 0}
652 | m_GameObject: {fileID: 8175407354174167579}
653 | m_CullTransparentMesh: 1
654 | --- !u!114 &4414436773456965150
655 | MonoBehaviour:
656 | m_ObjectHideFlags: 0
657 | m_CorrespondingSourceObject: {fileID: 0}
658 | m_PrefabInstance: {fileID: 0}
659 | m_PrefabAsset: {fileID: 0}
660 | m_GameObject: {fileID: 8175407354174167579}
661 | m_Enabled: 1
662 | m_EditorHideFlags: 0
663 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
664 | m_Name:
665 | m_EditorClassIdentifier:
666 | m_Material: {fileID: 0}
667 | m_Color: {r: 1, g: 1, b: 1, a: 1}
668 | m_RaycastTarget: 1
669 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
670 | m_Maskable: 1
671 | m_OnCullStateChanged:
672 | m_PersistentCalls:
673 | m_Calls: []
674 | m_Sprite: {fileID: 21300000, guid: bf7e1c548030f47449f2785f995df1ae, type: 3}
675 | m_Type: 1
676 | m_PreserveAspect: 0
677 | m_FillCenter: 1
678 | m_FillMethod: 4
679 | m_FillAmount: 1
680 | m_FillClockwise: 1
681 | m_FillOrigin: 0
682 | m_UseSpriteMesh: 0
683 | m_PixelsPerUnitMultiplier: 2
684 | --- !u!114 &6268533488412776771
685 | MonoBehaviour:
686 | m_ObjectHideFlags: 0
687 | m_CorrespondingSourceObject: {fileID: 0}
688 | m_PrefabInstance: {fileID: 0}
689 | m_PrefabAsset: {fileID: 0}
690 | m_GameObject: {fileID: 8175407354174167579}
691 | m_Enabled: 1
692 | m_EditorHideFlags: 0
693 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
694 | m_Name:
695 | m_EditorClassIdentifier:
696 | m_Navigation:
697 | m_Mode: 3
698 | m_WrapAround: 0
699 | m_SelectOnUp: {fileID: 0}
700 | m_SelectOnDown: {fileID: 0}
701 | m_SelectOnLeft: {fileID: 0}
702 | m_SelectOnRight: {fileID: 0}
703 | m_Transition: 1
704 | m_Colors:
705 | m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
706 | m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
707 | m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
708 | m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
709 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
710 | m_ColorMultiplier: 1
711 | m_FadeDuration: 0.1
712 | m_SpriteState:
713 | m_HighlightedSprite: {fileID: 0}
714 | m_PressedSprite: {fileID: 0}
715 | m_SelectedSprite: {fileID: 0}
716 | m_DisabledSprite: {fileID: 0}
717 | m_AnimationTriggers:
718 | m_NormalTrigger: Normal
719 | m_HighlightedTrigger: Highlighted
720 | m_PressedTrigger: Pressed
721 | m_SelectedTrigger: Selected
722 | m_DisabledTrigger: Disabled
723 | m_Interactable: 1
724 | m_TargetGraphic: {fileID: 4414436773456965150}
725 | m_OnClick:
726 | m_PersistentCalls:
727 | m_Calls: []
728 | --- !u!1 &8372635064853897010
729 | GameObject:
730 | m_ObjectHideFlags: 0
731 | m_CorrespondingSourceObject: {fileID: 0}
732 | m_PrefabInstance: {fileID: 0}
733 | m_PrefabAsset: {fileID: 0}
734 | serializedVersion: 6
735 | m_Component:
736 | - component: {fileID: 1207478930461614546}
737 | m_Layer: 0
738 | m_Name: HotFixPanel
739 | m_TagString: Untagged
740 | m_Icon: {fileID: 0}
741 | m_NavMeshLayer: 0
742 | m_StaticEditorFlags: 0
743 | m_IsActive: 0
744 | --- !u!224 &1207478930461614546
745 | RectTransform:
746 | m_ObjectHideFlags: 0
747 | m_CorrespondingSourceObject: {fileID: 0}
748 | m_PrefabInstance: {fileID: 0}
749 | m_PrefabAsset: {fileID: 0}
750 | m_GameObject: {fileID: 8372635064853897010}
751 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
752 | m_LocalPosition: {x: 0, y: 0, z: 0}
753 | m_LocalScale: {x: 1, y: 1, z: 1}
754 | m_ConstrainProportionsScale: 0
755 | m_Children:
756 | - {fileID: 1934431012300107606}
757 | - {fileID: 5110140089658016847}
758 | - {fileID: 7481939872184001411}
759 | - {fileID: 273991638745571060}
760 | m_Father: {fileID: 0}
761 | m_RootOrder: 0
762 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
763 | m_AnchorMin: {x: 0.5, y: 0.5}
764 | m_AnchorMax: {x: 0.5, y: 0.5}
765 | m_AnchoredPosition: {x: 0, y: 0}
766 | m_SizeDelta: {x: 100, y: 100}
767 | m_Pivot: {x: 0.5, y: 0.5}
768 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixPanel.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c68d29858286fe8409e7ce75f46b6885
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixProgressPanel.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &208096012819816926
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 8647513967100720668}
12 | - component: {fileID: 5910637919037832873}
13 | - component: {fileID: 1880447984609921524}
14 | m_Layer: 0
15 | m_Name: Tips
16 | m_TagString: Untagged
17 | m_Icon: {fileID: 0}
18 | m_NavMeshLayer: 0
19 | m_StaticEditorFlags: 0
20 | m_IsActive: 1
21 | --- !u!224 &8647513967100720668
22 | RectTransform:
23 | m_ObjectHideFlags: 0
24 | m_CorrespondingSourceObject: {fileID: 0}
25 | m_PrefabInstance: {fileID: 0}
26 | m_PrefabAsset: {fileID: 0}
27 | m_GameObject: {fileID: 208096012819816926}
28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29 | m_LocalPosition: {x: 0, y: 0, z: 0}
30 | m_LocalScale: {x: 1, y: 1, z: 1}
31 | m_ConstrainProportionsScale: 0
32 | m_Children: []
33 | m_Father: {fileID: 5456539686814339195}
34 | m_RootOrder: 3
35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36 | m_AnchorMin: {x: 0.5, y: 0.5}
37 | m_AnchorMax: {x: 0.5, y: 0.5}
38 | m_AnchoredPosition: {x: 0, y: 150}
39 | m_SizeDelta: {x: 1500, y: 50}
40 | m_Pivot: {x: 0.5, y: 0.5}
41 | --- !u!222 &5910637919037832873
42 | CanvasRenderer:
43 | m_ObjectHideFlags: 0
44 | m_CorrespondingSourceObject: {fileID: 0}
45 | m_PrefabInstance: {fileID: 0}
46 | m_PrefabAsset: {fileID: 0}
47 | m_GameObject: {fileID: 208096012819816926}
48 | m_CullTransparentMesh: 1
49 | --- !u!114 &1880447984609921524
50 | MonoBehaviour:
51 | m_ObjectHideFlags: 0
52 | m_CorrespondingSourceObject: {fileID: 0}
53 | m_PrefabInstance: {fileID: 0}
54 | m_PrefabAsset: {fileID: 0}
55 | m_GameObject: {fileID: 208096012819816926}
56 | m_Enabled: 1
57 | m_EditorHideFlags: 0
58 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
59 | m_Name:
60 | m_EditorClassIdentifier:
61 | m_Material: {fileID: 0}
62 | m_Color: {r: 1, g: 1, b: 1, a: 1}
63 | m_RaycastTarget: 1
64 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
65 | m_Maskable: 1
66 | m_OnCullStateChanged:
67 | m_PersistentCalls:
68 | m_Calls: []
69 | m_text: "\u6B63\u5728\u68C0\u67E5\u66F4\u65B0"
70 | m_isRightToLeft: 0
71 | m_fontAsset: {fileID: 11400000, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
72 | m_sharedMaterial: {fileID: -6767376747244427359, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
73 | m_fontSharedMaterials: []
74 | m_fontMaterial: {fileID: 0}
75 | m_fontMaterials: []
76 | m_fontColor32:
77 | serializedVersion: 2
78 | rgba: 4280558635
79 | m_fontColor: {r: 0.16981131, g: 0.14177643, b: 0.14177643, a: 1}
80 | m_enableVertexGradient: 0
81 | m_colorMode: 3
82 | m_fontColorGradient:
83 | topLeft: {r: 1, g: 1, b: 1, a: 1}
84 | topRight: {r: 1, g: 1, b: 1, a: 1}
85 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
86 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
87 | m_fontColorGradientPreset: {fileID: 0}
88 | m_spriteAsset: {fileID: 0}
89 | m_tintAllSprites: 0
90 | m_StyleSheet: {fileID: 0}
91 | m_TextStyleHashCode: -1183493901
92 | m_overrideHtmlColors: 0
93 | m_faceColor:
94 | serializedVersion: 2
95 | rgba: 4294967295
96 | m_fontSize: 36
97 | m_fontSizeBase: 36
98 | m_fontWeight: 400
99 | m_enableAutoSizing: 0
100 | m_fontSizeMin: 18
101 | m_fontSizeMax: 72
102 | m_fontStyle: 0
103 | m_HorizontalAlignment: 2
104 | m_VerticalAlignment: 512
105 | m_textAlignment: 65535
106 | m_characterSpacing: 0
107 | m_wordSpacing: 0
108 | m_lineSpacing: 0
109 | m_lineSpacingMax: 0
110 | m_paragraphSpacing: 0
111 | m_charWidthMaxAdj: 0
112 | m_enableWordWrapping: 1
113 | m_wordWrappingRatios: 0.4
114 | m_overflowMode: 0
115 | m_linkedTextComponent: {fileID: 0}
116 | parentLinkedComponent: {fileID: 0}
117 | m_enableKerning: 1
118 | m_enableExtraPadding: 0
119 | checkPaddingRequired: 0
120 | m_isRichText: 1
121 | m_parseCtrlCharacters: 1
122 | m_isOrthographic: 1
123 | m_isCullingEnabled: 0
124 | m_horizontalMapping: 0
125 | m_verticalMapping: 0
126 | m_uvLineOffset: 0
127 | m_geometrySortingOrder: 0
128 | m_IsTextObjectScaleStatic: 0
129 | m_VertexBufferAutoSizeReduction: 0
130 | m_useMaxVisibleDescender: 1
131 | m_pageToDisplay: 1
132 | m_margin: {x: 0, y: 0, z: 0, w: 0}
133 | m_isUsingLegacyAnimationComponent: 0
134 | m_isVolumetricText: 0
135 | m_hasFontAssetChanged: 0
136 | m_baseMaterial: {fileID: 0}
137 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
138 | --- !u!1 &334984951511249363
139 | GameObject:
140 | m_ObjectHideFlags: 0
141 | m_CorrespondingSourceObject: {fileID: 0}
142 | m_PrefabInstance: {fileID: 0}
143 | m_PrefabAsset: {fileID: 0}
144 | serializedVersion: 6
145 | m_Component:
146 | - component: {fileID: 3172693902633664966}
147 | - component: {fileID: 6337195599082181322}
148 | - component: {fileID: 7296481539075985023}
149 | m_Layer: 0
150 | m_Name: LoadingProgressText
151 | m_TagString: Untagged
152 | m_Icon: {fileID: 0}
153 | m_NavMeshLayer: 0
154 | m_StaticEditorFlags: 0
155 | m_IsActive: 1
156 | --- !u!224 &3172693902633664966
157 | RectTransform:
158 | m_ObjectHideFlags: 0
159 | m_CorrespondingSourceObject: {fileID: 0}
160 | m_PrefabInstance: {fileID: 0}
161 | m_PrefabAsset: {fileID: 0}
162 | m_GameObject: {fileID: 334984951511249363}
163 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
164 | m_LocalPosition: {x: 0, y: 0, z: 0}
165 | m_LocalScale: {x: 1, y: 1, z: 1}
166 | m_ConstrainProportionsScale: 0
167 | m_Children: []
168 | m_Father: {fileID: 5456539686814339195}
169 | m_RootOrder: 2
170 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
171 | m_AnchorMin: {x: 0.5, y: 0.5}
172 | m_AnchorMax: {x: 0.5, y: 0.5}
173 | m_AnchoredPosition: {x: 0, y: 86}
174 | m_SizeDelta: {x: 200, y: 50}
175 | m_Pivot: {x: 0.5, y: 0.5}
176 | --- !u!222 &6337195599082181322
177 | CanvasRenderer:
178 | m_ObjectHideFlags: 0
179 | m_CorrespondingSourceObject: {fileID: 0}
180 | m_PrefabInstance: {fileID: 0}
181 | m_PrefabAsset: {fileID: 0}
182 | m_GameObject: {fileID: 334984951511249363}
183 | m_CullTransparentMesh: 1
184 | --- !u!114 &7296481539075985023
185 | MonoBehaviour:
186 | m_ObjectHideFlags: 0
187 | m_CorrespondingSourceObject: {fileID: 0}
188 | m_PrefabInstance: {fileID: 0}
189 | m_PrefabAsset: {fileID: 0}
190 | m_GameObject: {fileID: 334984951511249363}
191 | m_Enabled: 1
192 | m_EditorHideFlags: 0
193 | m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
194 | m_Name:
195 | m_EditorClassIdentifier:
196 | m_Material: {fileID: 0}
197 | m_Color: {r: 1, g: 1, b: 1, a: 1}
198 | m_RaycastTarget: 1
199 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
200 | m_Maskable: 1
201 | m_OnCullStateChanged:
202 | m_PersistentCalls:
203 | m_Calls: []
204 | m_text: 50%
205 | m_isRightToLeft: 0
206 | m_fontAsset: {fileID: 11400000, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
207 | m_sharedMaterial: {fileID: -6767376747244427359, guid: 36f8019232867c646b9cbdff7658e2e6, type: 2}
208 | m_fontSharedMaterials: []
209 | m_fontMaterial: {fileID: 0}
210 | m_fontMaterials: []
211 | m_fontColor32:
212 | serializedVersion: 2
213 | rgba: 4294967295
214 | m_fontColor: {r: 1, g: 1, b: 1, a: 1}
215 | m_enableVertexGradient: 0
216 | m_colorMode: 3
217 | m_fontColorGradient:
218 | topLeft: {r: 1, g: 1, b: 1, a: 1}
219 | topRight: {r: 1, g: 1, b: 1, a: 1}
220 | bottomLeft: {r: 1, g: 1, b: 1, a: 1}
221 | bottomRight: {r: 1, g: 1, b: 1, a: 1}
222 | m_fontColorGradientPreset: {fileID: 0}
223 | m_spriteAsset: {fileID: 0}
224 | m_tintAllSprites: 0
225 | m_StyleSheet: {fileID: 0}
226 | m_TextStyleHashCode: -1183493901
227 | m_overrideHtmlColors: 0
228 | m_faceColor:
229 | serializedVersion: 2
230 | rgba: 4294967295
231 | m_fontSize: 30
232 | m_fontSizeBase: 30
233 | m_fontWeight: 400
234 | m_enableAutoSizing: 0
235 | m_fontSizeMin: 18
236 | m_fontSizeMax: 72
237 | m_fontStyle: 0
238 | m_HorizontalAlignment: 2
239 | m_VerticalAlignment: 512
240 | m_textAlignment: 65535
241 | m_characterSpacing: 0
242 | m_wordSpacing: 0
243 | m_lineSpacing: 0
244 | m_lineSpacingMax: 0
245 | m_paragraphSpacing: 0
246 | m_charWidthMaxAdj: 0
247 | m_enableWordWrapping: 1
248 | m_wordWrappingRatios: 0.4
249 | m_overflowMode: 0
250 | m_linkedTextComponent: {fileID: 0}
251 | parentLinkedComponent: {fileID: 0}
252 | m_enableKerning: 1
253 | m_enableExtraPadding: 0
254 | checkPaddingRequired: 0
255 | m_isRichText: 1
256 | m_parseCtrlCharacters: 1
257 | m_isOrthographic: 1
258 | m_isCullingEnabled: 0
259 | m_horizontalMapping: 0
260 | m_verticalMapping: 0
261 | m_uvLineOffset: 0
262 | m_geometrySortingOrder: 0
263 | m_IsTextObjectScaleStatic: 0
264 | m_VertexBufferAutoSizeReduction: 0
265 | m_useMaxVisibleDescender: 1
266 | m_pageToDisplay: 1
267 | m_margin: {x: 0, y: 0, z: 0, w: 0}
268 | m_isUsingLegacyAnimationComponent: 0
269 | m_isVolumetricText: 0
270 | m_hasFontAssetChanged: 0
271 | m_baseMaterial: {fileID: 0}
272 | m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
273 | --- !u!1 &1123701429321701316
274 | GameObject:
275 | m_ObjectHideFlags: 0
276 | m_CorrespondingSourceObject: {fileID: 0}
277 | m_PrefabInstance: {fileID: 0}
278 | m_PrefabAsset: {fileID: 0}
279 | serializedVersion: 6
280 | m_Component:
281 | - component: {fileID: 5456539686814339195}
282 | m_Layer: 0
283 | m_Name: HotFixProgressPanel
284 | m_TagString: Untagged
285 | m_Icon: {fileID: 0}
286 | m_NavMeshLayer: 0
287 | m_StaticEditorFlags: 0
288 | m_IsActive: 1
289 | --- !u!224 &5456539686814339195
290 | RectTransform:
291 | m_ObjectHideFlags: 0
292 | m_CorrespondingSourceObject: {fileID: 0}
293 | m_PrefabInstance: {fileID: 0}
294 | m_PrefabAsset: {fileID: 0}
295 | m_GameObject: {fileID: 1123701429321701316}
296 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
297 | m_LocalPosition: {x: 0, y: 0, z: 0}
298 | m_LocalScale: {x: 1, y: 1, z: 1}
299 | m_ConstrainProportionsScale: 0
300 | m_Children:
301 | - {fileID: 4470291330515367484}
302 | - {fileID: 6110421669070930103}
303 | - {fileID: 3172693902633664966}
304 | - {fileID: 8647513967100720668}
305 | m_Father: {fileID: 0}
306 | m_RootOrder: 0
307 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
308 | m_AnchorMin: {x: 0.5, y: 0}
309 | m_AnchorMax: {x: 0.5, y: 0}
310 | m_AnchoredPosition: {x: 0, y: 0}
311 | m_SizeDelta: {x: 0, y: 0}
312 | m_Pivot: {x: 0.5, y: 0.5}
313 | --- !u!1 &3099826599417027770
314 | GameObject:
315 | m_ObjectHideFlags: 0
316 | m_CorrespondingSourceObject: {fileID: 0}
317 | m_PrefabInstance: {fileID: 0}
318 | m_PrefabAsset: {fileID: 0}
319 | serializedVersion: 6
320 | m_Component:
321 | - component: {fileID: 2628986474834600709}
322 | - component: {fileID: 7486347552832532661}
323 | - component: {fileID: 4133962839995778045}
324 | m_Layer: 0
325 | m_Name: LoadingProgressPoint
326 | m_TagString: Untagged
327 | m_Icon: {fileID: 0}
328 | m_NavMeshLayer: 0
329 | m_StaticEditorFlags: 0
330 | m_IsActive: 1
331 | --- !u!224 &2628986474834600709
332 | RectTransform:
333 | m_ObjectHideFlags: 0
334 | m_CorrespondingSourceObject: {fileID: 0}
335 | m_PrefabInstance: {fileID: 0}
336 | m_PrefabAsset: {fileID: 0}
337 | m_GameObject: {fileID: 3099826599417027770}
338 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
339 | m_LocalPosition: {x: 0, y: 0, z: 0}
340 | m_LocalScale: {x: 1, y: 1, z: 1}
341 | m_ConstrainProportionsScale: 0
342 | m_Children: []
343 | m_Father: {fileID: 6110421669070930103}
344 | m_RootOrder: 0
345 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
346 | m_AnchorMin: {x: 0.5, y: 0.5}
347 | m_AnchorMax: {x: 0.5, y: 0.5}
348 | m_AnchoredPosition: {x: 0, y: 0}
349 | m_SizeDelta: {x: 80, y: 80}
350 | m_Pivot: {x: 0.5, y: 0.5}
351 | --- !u!222 &7486347552832532661
352 | CanvasRenderer:
353 | m_ObjectHideFlags: 0
354 | m_CorrespondingSourceObject: {fileID: 0}
355 | m_PrefabInstance: {fileID: 0}
356 | m_PrefabAsset: {fileID: 0}
357 | m_GameObject: {fileID: 3099826599417027770}
358 | m_CullTransparentMesh: 1
359 | --- !u!114 &4133962839995778045
360 | MonoBehaviour:
361 | m_ObjectHideFlags: 0
362 | m_CorrespondingSourceObject: {fileID: 0}
363 | m_PrefabInstance: {fileID: 0}
364 | m_PrefabAsset: {fileID: 0}
365 | m_GameObject: {fileID: 3099826599417027770}
366 | m_Enabled: 1
367 | m_EditorHideFlags: 0
368 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
369 | m_Name:
370 | m_EditorClassIdentifier:
371 | m_Material: {fileID: 0}
372 | m_Color: {r: 0.766, g: 0.766, b: 0.766, a: 1}
373 | m_RaycastTarget: 1
374 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
375 | m_Maskable: 1
376 | m_OnCullStateChanged:
377 | m_PersistentCalls:
378 | m_Calls: []
379 | m_Sprite: {fileID: 21300000, guid: 0974a31d5b93ee5428a3566e164f1566, type: 3}
380 | m_Type: 0
381 | m_PreserveAspect: 0
382 | m_FillCenter: 1
383 | m_FillMethod: 4
384 | m_FillAmount: 1
385 | m_FillClockwise: 1
386 | m_FillOrigin: 0
387 | m_UseSpriteMesh: 0
388 | m_PixelsPerUnitMultiplier: 1
389 | --- !u!1 &5023647824485644597
390 | GameObject:
391 | m_ObjectHideFlags: 0
392 | m_CorrespondingSourceObject: {fileID: 0}
393 | m_PrefabInstance: {fileID: 0}
394 | m_PrefabAsset: {fileID: 0}
395 | serializedVersion: 6
396 | m_Component:
397 | - component: {fileID: 4470291330515367484}
398 | - component: {fileID: 2934406742509676577}
399 | - component: {fileID: 7833289984662660771}
400 | m_Layer: 0
401 | m_Name: LoadingProgressBG
402 | m_TagString: Untagged
403 | m_Icon: {fileID: 0}
404 | m_NavMeshLayer: 0
405 | m_StaticEditorFlags: 0
406 | m_IsActive: 1
407 | --- !u!224 &4470291330515367484
408 | RectTransform:
409 | m_ObjectHideFlags: 0
410 | m_CorrespondingSourceObject: {fileID: 0}
411 | m_PrefabInstance: {fileID: 0}
412 | m_PrefabAsset: {fileID: 0}
413 | m_GameObject: {fileID: 5023647824485644597}
414 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
415 | m_LocalPosition: {x: 0, y: 0, z: 0}
416 | m_LocalScale: {x: 1, y: 1, z: 1}
417 | m_ConstrainProportionsScale: 0
418 | m_Children: []
419 | m_Father: {fileID: 5456539686814339195}
420 | m_RootOrder: 0
421 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
422 | m_AnchorMin: {x: 0.5, y: 0.5}
423 | m_AnchorMax: {x: 0.5, y: 0.5}
424 | m_AnchoredPosition: {x: 0, y: 88.26898}
425 | m_SizeDelta: {x: 1742.7588, y: 40}
426 | m_Pivot: {x: 0.5, y: 0.5}
427 | --- !u!222 &2934406742509676577
428 | CanvasRenderer:
429 | m_ObjectHideFlags: 0
430 | m_CorrespondingSourceObject: {fileID: 0}
431 | m_PrefabInstance: {fileID: 0}
432 | m_PrefabAsset: {fileID: 0}
433 | m_GameObject: {fileID: 5023647824485644597}
434 | m_CullTransparentMesh: 1
435 | --- !u!114 &7833289984662660771
436 | MonoBehaviour:
437 | m_ObjectHideFlags: 0
438 | m_CorrespondingSourceObject: {fileID: 0}
439 | m_PrefabInstance: {fileID: 0}
440 | m_PrefabAsset: {fileID: 0}
441 | m_GameObject: {fileID: 5023647824485644597}
442 | m_Enabled: 1
443 | m_EditorHideFlags: 0
444 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
445 | m_Name:
446 | m_EditorClassIdentifier:
447 | m_Material: {fileID: 0}
448 | m_Color: {r: 1, g: 1, b: 1, a: 1}
449 | m_RaycastTarget: 1
450 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
451 | m_Maskable: 1
452 | m_OnCullStateChanged:
453 | m_PersistentCalls:
454 | m_Calls: []
455 | m_Sprite: {fileID: 21300000, guid: 59f3cae74e0cc4f4e8c283b32cdb96f0, type: 3}
456 | m_Type: 1
457 | m_PreserveAspect: 0
458 | m_FillCenter: 1
459 | m_FillMethod: 4
460 | m_FillAmount: 1
461 | m_FillClockwise: 1
462 | m_FillOrigin: 0
463 | m_UseSpriteMesh: 0
464 | m_PixelsPerUnitMultiplier: 2
465 | --- !u!1 &6261655222081718120
466 | GameObject:
467 | m_ObjectHideFlags: 0
468 | m_CorrespondingSourceObject: {fileID: 0}
469 | m_PrefabInstance: {fileID: 0}
470 | m_PrefabAsset: {fileID: 0}
471 | serializedVersion: 6
472 | m_Component:
473 | - component: {fileID: 6110421669070930103}
474 | - component: {fileID: 8318272324803318262}
475 | - component: {fileID: 1476059550557219976}
476 | m_Layer: 0
477 | m_Name: LoadingProgressFG
478 | m_TagString: Untagged
479 | m_Icon: {fileID: 0}
480 | m_NavMeshLayer: 0
481 | m_StaticEditorFlags: 0
482 | m_IsActive: 1
483 | --- !u!224 &6110421669070930103
484 | RectTransform:
485 | m_ObjectHideFlags: 0
486 | m_CorrespondingSourceObject: {fileID: 0}
487 | m_PrefabInstance: {fileID: 0}
488 | m_PrefabAsset: {fileID: 0}
489 | m_GameObject: {fileID: 6261655222081718120}
490 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
491 | m_LocalPosition: {x: 0, y: 0, z: 0}
492 | m_LocalScale: {x: 1, y: 1, z: 1}
493 | m_ConstrainProportionsScale: 0
494 | m_Children:
495 | - {fileID: 2628986474834600709}
496 | m_Father: {fileID: 5456539686814339195}
497 | m_RootOrder: 1
498 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
499 | m_AnchorMin: {x: 0.5, y: 0.5}
500 | m_AnchorMax: {x: 0.5, y: 0.5}
501 | m_AnchoredPosition: {x: -0.0001, y: 88.26898}
502 | m_SizeDelta: {x: 1742.7588, y: 40}
503 | m_Pivot: {x: 0.5, y: 0.5}
504 | --- !u!222 &8318272324803318262
505 | CanvasRenderer:
506 | m_ObjectHideFlags: 0
507 | m_CorrespondingSourceObject: {fileID: 0}
508 | m_PrefabInstance: {fileID: 0}
509 | m_PrefabAsset: {fileID: 0}
510 | m_GameObject: {fileID: 6261655222081718120}
511 | m_CullTransparentMesh: 1
512 | --- !u!114 &1476059550557219976
513 | MonoBehaviour:
514 | m_ObjectHideFlags: 0
515 | m_CorrespondingSourceObject: {fileID: 0}
516 | m_PrefabInstance: {fileID: 0}
517 | m_PrefabAsset: {fileID: 0}
518 | m_GameObject: {fileID: 6261655222081718120}
519 | m_Enabled: 1
520 | m_EditorHideFlags: 0
521 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
522 | m_Name:
523 | m_EditorClassIdentifier:
524 | m_Material: {fileID: 0}
525 | m_Color: {r: 0.24230155, g: 0.30861416, b: 0.31132078, a: 1}
526 | m_RaycastTarget: 1
527 | m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
528 | m_Maskable: 1
529 | m_OnCullStateChanged:
530 | m_PersistentCalls:
531 | m_Calls: []
532 | m_Sprite: {fileID: 21300000, guid: 674787eb10556f14287c34d65078bd5d, type: 3}
533 | m_Type: 3
534 | m_PreserveAspect: 0
535 | m_FillCenter: 1
536 | m_FillMethod: 0
537 | m_FillAmount: 0.5
538 | m_FillClockwise: 1
539 | m_FillOrigin: 0
540 | m_UseSpriteMesh: 0
541 | m_PixelsPerUnitMultiplier: 1
542 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/HotFixProgressPanel.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: cea1159a7e85b3f40a118294ede251a2
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/SangoPatchRoot.prefab:
--------------------------------------------------------------------------------
1 | %YAML 1.1
2 | %TAG !u! tag:unity3d.com,2011:
3 | --- !u!1 &2274285450713248455
4 | GameObject:
5 | m_ObjectHideFlags: 0
6 | m_CorrespondingSourceObject: {fileID: 0}
7 | m_PrefabInstance: {fileID: 0}
8 | m_PrefabAsset: {fileID: 0}
9 | serializedVersion: 6
10 | m_Component:
11 | - component: {fileID: 770158323821192275}
12 | m_Layer: 5
13 | m_Name: SangoPatchRoot
14 | m_TagString: Untagged
15 | m_Icon: {fileID: 0}
16 | m_NavMeshLayer: 0
17 | m_StaticEditorFlags: 0
18 | m_IsActive: 1
19 | --- !u!224 &770158323821192275
20 | RectTransform:
21 | m_ObjectHideFlags: 0
22 | m_CorrespondingSourceObject: {fileID: 0}
23 | m_PrefabInstance: {fileID: 0}
24 | m_PrefabAsset: {fileID: 0}
25 | m_GameObject: {fileID: 2274285450713248455}
26 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
27 | m_LocalPosition: {x: 0, y: 0, z: 0}
28 | m_LocalScale: {x: 1, y: 1, z: 1}
29 | m_ConstrainProportionsScale: 0
30 | m_Children:
31 | - {fileID: 82544663495226852}
32 | - {fileID: 1876427292118920351}
33 | - {fileID: 8091390473429781909}
34 | m_Father: {fileID: 0}
35 | m_RootOrder: 0
36 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
37 | m_AnchorMin: {x: 0, y: 0}
38 | m_AnchorMax: {x: 1, y: 1}
39 | m_AnchoredPosition: {x: 0, y: 0}
40 | m_SizeDelta: {x: 0, y: 0}
41 | m_Pivot: {x: 0, y: 0}
42 | --- !u!1001 &827656286555271066
43 | PrefabInstance:
44 | m_ObjectHideFlags: 0
45 | serializedVersion: 2
46 | m_Modification:
47 | m_TransformParent: {fileID: 770158323821192275}
48 | m_Modifications:
49 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
50 | propertyPath: m_Pivot.x
51 | value: 0.5
52 | objectReference: {fileID: 0}
53 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
54 | propertyPath: m_Pivot.y
55 | value: 0.5
56 | objectReference: {fileID: 0}
57 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
58 | propertyPath: m_RootOrder
59 | value: 0
60 | objectReference: {fileID: 0}
61 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
62 | propertyPath: m_AnchorMax.x
63 | value: 1
64 | objectReference: {fileID: 0}
65 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
66 | propertyPath: m_AnchorMax.y
67 | value: 0.5
68 | objectReference: {fileID: 0}
69 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
70 | propertyPath: m_AnchorMin.x
71 | value: 0
72 | objectReference: {fileID: 0}
73 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
74 | propertyPath: m_AnchorMin.y
75 | value: 0.5
76 | objectReference: {fileID: 0}
77 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
78 | propertyPath: m_SizeDelta.x
79 | value: 0
80 | objectReference: {fileID: 0}
81 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
82 | propertyPath: m_SizeDelta.y
83 | value: 1080
84 | objectReference: {fileID: 0}
85 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
86 | propertyPath: m_LocalPosition.x
87 | value: 0
88 | objectReference: {fileID: 0}
89 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
90 | propertyPath: m_LocalPosition.y
91 | value: 0
92 | objectReference: {fileID: 0}
93 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
94 | propertyPath: m_LocalPosition.z
95 | value: 0
96 | objectReference: {fileID: 0}
97 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
98 | propertyPath: m_LocalRotation.w
99 | value: 1
100 | objectReference: {fileID: 0}
101 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
102 | propertyPath: m_LocalRotation.x
103 | value: -0
104 | objectReference: {fileID: 0}
105 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
106 | propertyPath: m_LocalRotation.y
107 | value: -0
108 | objectReference: {fileID: 0}
109 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
110 | propertyPath: m_LocalRotation.z
111 | value: -0
112 | objectReference: {fileID: 0}
113 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
114 | propertyPath: m_AnchoredPosition.x
115 | value: 0
116 | objectReference: {fileID: 0}
117 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
118 | propertyPath: m_AnchoredPosition.y
119 | value: 0
120 | objectReference: {fileID: 0}
121 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
122 | propertyPath: m_LocalEulerAnglesHint.x
123 | value: 0
124 | objectReference: {fileID: 0}
125 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
126 | propertyPath: m_LocalEulerAnglesHint.y
127 | value: 0
128 | objectReference: {fileID: 0}
129 | - target: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
130 | propertyPath: m_LocalEulerAnglesHint.z
131 | value: 0
132 | objectReference: {fileID: 0}
133 | - target: {fileID: 1664767977149602139, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
134 | propertyPath: m_Name
135 | value: HotFixBG
136 | objectReference: {fileID: 0}
137 | m_RemovedComponents: []
138 | m_SourcePrefab: {fileID: 100100000, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
139 | --- !u!224 &82544663495226852 stripped
140 | RectTransform:
141 | m_CorrespondingSourceObject: {fileID: 745676617468238462, guid: 1dc08fa7887ec744bba872b6d80d5e69, type: 3}
142 | m_PrefabInstance: {fileID: 827656286555271066}
143 | m_PrefabAsset: {fileID: 0}
144 | --- !u!1001 &5887310002791349476
145 | PrefabInstance:
146 | m_ObjectHideFlags: 0
147 | serializedVersion: 2
148 | m_Modification:
149 | m_TransformParent: {fileID: 770158323821192275}
150 | m_Modifications:
151 | - target: {fileID: 1123701429321701316, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
152 | propertyPath: m_Name
153 | value: HotFixProgressPanel
154 | objectReference: {fileID: 0}
155 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
156 | propertyPath: m_Pivot.x
157 | value: 0.5
158 | objectReference: {fileID: 0}
159 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
160 | propertyPath: m_Pivot.y
161 | value: 0.5
162 | objectReference: {fileID: 0}
163 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
164 | propertyPath: m_RootOrder
165 | value: 1
166 | objectReference: {fileID: 0}
167 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
168 | propertyPath: m_AnchorMax.x
169 | value: 0.5
170 | objectReference: {fileID: 0}
171 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
172 | propertyPath: m_AnchorMax.y
173 | value: 0
174 | objectReference: {fileID: 0}
175 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
176 | propertyPath: m_AnchorMin.x
177 | value: 0.5
178 | objectReference: {fileID: 0}
179 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
180 | propertyPath: m_AnchorMin.y
181 | value: 0
182 | objectReference: {fileID: 0}
183 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
184 | propertyPath: m_SizeDelta.x
185 | value: 0
186 | objectReference: {fileID: 0}
187 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
188 | propertyPath: m_SizeDelta.y
189 | value: 0
190 | objectReference: {fileID: 0}
191 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
192 | propertyPath: m_LocalPosition.x
193 | value: 0
194 | objectReference: {fileID: 0}
195 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
196 | propertyPath: m_LocalPosition.y
197 | value: 0
198 | objectReference: {fileID: 0}
199 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
200 | propertyPath: m_LocalPosition.z
201 | value: 0
202 | objectReference: {fileID: 0}
203 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
204 | propertyPath: m_LocalRotation.w
205 | value: 1
206 | objectReference: {fileID: 0}
207 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
208 | propertyPath: m_LocalRotation.x
209 | value: -0
210 | objectReference: {fileID: 0}
211 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
212 | propertyPath: m_LocalRotation.y
213 | value: -0
214 | objectReference: {fileID: 0}
215 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
216 | propertyPath: m_LocalRotation.z
217 | value: -0
218 | objectReference: {fileID: 0}
219 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
220 | propertyPath: m_AnchoredPosition.x
221 | value: 0
222 | objectReference: {fileID: 0}
223 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
224 | propertyPath: m_AnchoredPosition.y
225 | value: 25
226 | objectReference: {fileID: 0}
227 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
228 | propertyPath: m_LocalEulerAnglesHint.x
229 | value: 0
230 | objectReference: {fileID: 0}
231 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
232 | propertyPath: m_LocalEulerAnglesHint.y
233 | value: 0
234 | objectReference: {fileID: 0}
235 | - target: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
236 | propertyPath: m_LocalEulerAnglesHint.z
237 | value: 0
238 | objectReference: {fileID: 0}
239 | m_RemovedComponents: []
240 | m_SourcePrefab: {fileID: 100100000, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
241 | --- !u!224 &1876427292118920351 stripped
242 | RectTransform:
243 | m_CorrespondingSourceObject: {fileID: 5456539686814339195, guid: cea1159a7e85b3f40a118294ede251a2, type: 3}
244 | m_PrefabInstance: {fileID: 5887310002791349476}
245 | m_PrefabAsset: {fileID: 0}
246 | --- !u!1001 &6956855755700825159
247 | PrefabInstance:
248 | m_ObjectHideFlags: 0
249 | serializedVersion: 2
250 | m_Modification:
251 | m_TransformParent: {fileID: 770158323821192275}
252 | m_Modifications:
253 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
254 | propertyPath: m_Pivot.x
255 | value: 0.5
256 | objectReference: {fileID: 0}
257 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
258 | propertyPath: m_Pivot.y
259 | value: 0.5
260 | objectReference: {fileID: 0}
261 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
262 | propertyPath: m_RootOrder
263 | value: 2
264 | objectReference: {fileID: 0}
265 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
266 | propertyPath: m_AnchorMax.x
267 | value: 0.5
268 | objectReference: {fileID: 0}
269 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
270 | propertyPath: m_AnchorMax.y
271 | value: 0.5
272 | objectReference: {fileID: 0}
273 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
274 | propertyPath: m_AnchorMin.x
275 | value: 0.5
276 | objectReference: {fileID: 0}
277 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
278 | propertyPath: m_AnchorMin.y
279 | value: 0.5
280 | objectReference: {fileID: 0}
281 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
282 | propertyPath: m_SizeDelta.x
283 | value: 100
284 | objectReference: {fileID: 0}
285 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
286 | propertyPath: m_SizeDelta.y
287 | value: 100
288 | objectReference: {fileID: 0}
289 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
290 | propertyPath: m_LocalPosition.x
291 | value: 0
292 | objectReference: {fileID: 0}
293 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
294 | propertyPath: m_LocalPosition.y
295 | value: 0
296 | objectReference: {fileID: 0}
297 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
298 | propertyPath: m_LocalPosition.z
299 | value: 0
300 | objectReference: {fileID: 0}
301 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
302 | propertyPath: m_LocalRotation.w
303 | value: 1
304 | objectReference: {fileID: 0}
305 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
306 | propertyPath: m_LocalRotation.x
307 | value: -0
308 | objectReference: {fileID: 0}
309 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
310 | propertyPath: m_LocalRotation.y
311 | value: -0
312 | objectReference: {fileID: 0}
313 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
314 | propertyPath: m_LocalRotation.z
315 | value: -0
316 | objectReference: {fileID: 0}
317 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
318 | propertyPath: m_AnchoredPosition.x
319 | value: 0
320 | objectReference: {fileID: 0}
321 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
322 | propertyPath: m_AnchoredPosition.y
323 | value: 0
324 | objectReference: {fileID: 0}
325 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
326 | propertyPath: m_LocalEulerAnglesHint.x
327 | value: 0
328 | objectReference: {fileID: 0}
329 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
330 | propertyPath: m_LocalEulerAnglesHint.y
331 | value: 0
332 | objectReference: {fileID: 0}
333 | - target: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
334 | propertyPath: m_LocalEulerAnglesHint.z
335 | value: 0
336 | objectReference: {fileID: 0}
337 | - target: {fileID: 8372635064853897010, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
338 | propertyPath: m_Name
339 | value: MessageBox
340 | objectReference: {fileID: 0}
341 | m_RemovedComponents: []
342 | m_SourcePrefab: {fileID: 100100000, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
343 | --- !u!224 &8091390473429781909 stripped
344 | RectTransform:
345 | m_CorrespondingSourceObject: {fileID: 1207478930461614546, guid: c68d29858286fe8409e7ce75f46b6885, type: 3}
346 | m_PrefabInstance: {fileID: 6956855755700825159}
347 | m_PrefabAsset: {fileID: 0}
348 |
--------------------------------------------------------------------------------
/Resources/ResPrefabs/SangoPatchRoot.prefab.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 92e1a3357585db6459bd2d98f01ace11
3 | PrefabImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Resources/ResSprites.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d7c56c08b3b701a43b5bcc8e6059a7b3
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Resources/ResSprites/Gcg_Loading_Bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/Gcg_Loading_Bg2.png
--------------------------------------------------------------------------------
/Resources/ResSprites/Gcg_Loading_Bg2.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0bb95d0c6588ec441b3543f6b7e71753
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 0
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_FleurFairDungeon_Btn_Bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/UI_FleurFairDungeon_Btn_Bg.png
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_FleurFairDungeon_Btn_Bg.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bf7e1c548030f47449f2785f995df1ae
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 59, y: 0, z: 59, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 1537655665
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Frm_FungusFighter_Puzzle_Card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/UI_Frm_FungusFighter_Puzzle_Card.png
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Frm_FungusFighter_Puzzle_Card.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ffd84c53b30ff6241b86cdbfa0869535
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 0
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Img_CoopChapter_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/UI_Img_CoopChapter_2.png
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Img_CoopChapter_2.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 674787eb10556f14287c34d65078bd5d
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 0
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Img_CoopChapter_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/UI_Img_CoopChapter_3.png
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Img_CoopChapter_3.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 59f3cae74e0cc4f4e8c283b32cdb96f0
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 57, y: 0, z: 60, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 1537655665
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Irodori_Stage_Btn_Shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Gaolingx/SangoUtils.Hotfix_YooAsset/717e5e8d43dd080a7b25adef8bed4f7bb33dce69/Resources/ResSprites/UI_Irodori_Stage_Btn_Shadow.png
--------------------------------------------------------------------------------
/Resources/ResSprites/UI_Irodori_Stage_Btn_Shadow.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0974a31d5b93ee5428a3566e164f1566
3 | TextureImporter:
4 | internalIDToNameTable: []
5 | externalObjects: {}
6 | serializedVersion: 12
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 0
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | flipGreenChannel: 0
24 | isReadable: 0
25 | streamingMipmaps: 0
26 | streamingMipmapsPriority: 0
27 | vTOnly: 0
28 | ignoreMipmapLimit: 0
29 | grayScaleToAlpha: 0
30 | generateCubemap: 6
31 | cubemapConvolution: 0
32 | seamlessCubemap: 0
33 | textureFormat: 1
34 | maxTextureSize: 2048
35 | textureSettings:
36 | serializedVersion: 2
37 | filterMode: 1
38 | aniso: 1
39 | mipBias: 0
40 | wrapU: 1
41 | wrapV: 1
42 | wrapW: 0
43 | nPOTScale: 0
44 | lightmap: 0
45 | compressionQuality: 50
46 | spriteMode: 1
47 | spriteExtrude: 1
48 | spriteMeshType: 1
49 | alignment: 0
50 | spritePivot: {x: 0.5, y: 0.5}
51 | spritePixelsToUnits: 100
52 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
53 | spriteGenerateFallbackPhysicsShape: 1
54 | alphaUsage: 1
55 | alphaIsTransparency: 1
56 | spriteTessellationDetail: -1
57 | textureType: 8
58 | textureShape: 1
59 | singleChannelComponent: 0
60 | flipbookRows: 1
61 | flipbookColumns: 1
62 | maxTextureSizeSet: 0
63 | compressionQualitySet: 0
64 | textureFormatSet: 0
65 | ignorePngGamma: 0
66 | applyGammaDecoding: 0
67 | swizzle: 50462976
68 | cookieLightType: 0
69 | platformSettings:
70 | - serializedVersion: 3
71 | buildTarget: DefaultTexturePlatform
72 | maxTextureSize: 2048
73 | resizeAlgorithm: 0
74 | textureFormat: -1
75 | textureCompression: 1
76 | compressionQuality: 50
77 | crunchedCompression: 0
78 | allowsAlphaSplitting: 0
79 | overridden: 0
80 | ignorePlatformSupport: 0
81 | androidETC2FallbackOverride: 0
82 | forceMaximumCompressionQuality_BC6H_BC7: 0
83 | - serializedVersion: 3
84 | buildTarget: Standalone
85 | maxTextureSize: 2048
86 | resizeAlgorithm: 0
87 | textureFormat: -1
88 | textureCompression: 1
89 | compressionQuality: 50
90 | crunchedCompression: 0
91 | allowsAlphaSplitting: 0
92 | overridden: 0
93 | ignorePlatformSupport: 0
94 | androidETC2FallbackOverride: 0
95 | forceMaximumCompressionQuality_BC6H_BC7: 0
96 | - serializedVersion: 3
97 | buildTarget: Server
98 | maxTextureSize: 2048
99 | resizeAlgorithm: 0
100 | textureFormat: -1
101 | textureCompression: 1
102 | compressionQuality: 50
103 | crunchedCompression: 0
104 | allowsAlphaSplitting: 0
105 | overridden: 0
106 | ignorePlatformSupport: 0
107 | androidETC2FallbackOverride: 0
108 | forceMaximumCompressionQuality_BC6H_BC7: 0
109 | - serializedVersion: 3
110 | buildTarget: Android
111 | maxTextureSize: 2048
112 | resizeAlgorithm: 0
113 | textureFormat: -1
114 | textureCompression: 1
115 | compressionQuality: 50
116 | crunchedCompression: 0
117 | allowsAlphaSplitting: 0
118 | overridden: 0
119 | ignorePlatformSupport: 0
120 | androidETC2FallbackOverride: 0
121 | forceMaximumCompressionQuality_BC6H_BC7: 0
122 | - serializedVersion: 3
123 | buildTarget: iPhone
124 | maxTextureSize: 2048
125 | resizeAlgorithm: 0
126 | textureFormat: -1
127 | textureCompression: 1
128 | compressionQuality: 50
129 | crunchedCompression: 0
130 | allowsAlphaSplitting: 0
131 | overridden: 0
132 | ignorePlatformSupport: 0
133 | androidETC2FallbackOverride: 0
134 | forceMaximumCompressionQuality_BC6H_BC7: 0
135 | - serializedVersion: 3
136 | buildTarget: WebGL
137 | maxTextureSize: 2048
138 | resizeAlgorithm: 0
139 | textureFormat: -1
140 | textureCompression: 1
141 | compressionQuality: 50
142 | crunchedCompression: 0
143 | allowsAlphaSplitting: 0
144 | overridden: 0
145 | ignorePlatformSupport: 0
146 | androidETC2FallbackOverride: 0
147 | forceMaximumCompressionQuality_BC6H_BC7: 0
148 | - serializedVersion: 3
149 | buildTarget: Windows Store Apps
150 | maxTextureSize: 2048
151 | resizeAlgorithm: 0
152 | textureFormat: -1
153 | textureCompression: 1
154 | compressionQuality: 50
155 | crunchedCompression: 0
156 | allowsAlphaSplitting: 0
157 | overridden: 0
158 | ignorePlatformSupport: 0
159 | androidETC2FallbackOverride: 0
160 | forceMaximumCompressionQuality_BC6H_BC7: 0
161 | - serializedVersion: 3
162 | buildTarget: tvOS
163 | maxTextureSize: 2048
164 | resizeAlgorithm: 0
165 | textureFormat: -1
166 | textureCompression: 1
167 | compressionQuality: 50
168 | crunchedCompression: 0
169 | allowsAlphaSplitting: 0
170 | overridden: 0
171 | ignorePlatformSupport: 0
172 | androidETC2FallbackOverride: 0
173 | forceMaximumCompressionQuality_BC6H_BC7: 0
174 | spriteSheet:
175 | serializedVersion: 2
176 | sprites: []
177 | outline: []
178 | physicsShape: []
179 | bones: []
180 | spriteID: 5e97eb03825dee720800000000000000
181 | internalID: 0
182 | vertices: []
183 | indices:
184 | edges: []
185 | weights: []
186 | secondaryTextures: []
187 | nameFileIdTable: {}
188 | mipmapLimitGroupName:
189 | pSDRemoveMatte: 0
190 | userData:
191 | assetBundleName:
192 | assetBundleVariant:
193 |
--------------------------------------------------------------------------------
/Scripts.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 62e3192ddf0ba2541b1c85b81b2c21e8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6b2ec43cdd3a59e4e99a6ce8b474a5b4
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Editor/Encryption.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset;
2 | using System;
3 | using System.IO;
4 | using System.Text;
5 | using YooAsset;
6 |
7 | ///
8 | /// 文件偏移加密方式
9 | ///
10 | public class FileOffsetEncryption : IEncryptionServices
11 | {
12 | public EncryptResult Encrypt(EncryptFileInfo fileInfo)
13 | {
14 | // 注意:只对音频资源包加密
15 | if (fileInfo.BundleName.Contains("_gameres_audio"))
16 | {
17 | int offset = 32;
18 | byte[] fileData = File.ReadAllBytes(fileInfo.FilePath);
19 | var encryptedData = new byte[fileData.Length + offset];
20 | Buffer.BlockCopy(fileData, 0, encryptedData, offset, fileData.Length);
21 |
22 | EncryptResult result = new EncryptResult();
23 | result.Encrypted = true;
24 | result.EncryptedData = encryptedData;
25 | return result;
26 | }
27 | else
28 | {
29 | EncryptResult result = new EncryptResult();
30 | result.Encrypted = false;
31 | return result;
32 | }
33 | }
34 | }
35 |
36 | ///
37 | /// 文件流加密方式
38 | ///
39 | public class FileStreamEncryption : IEncryptionServices
40 | {
41 | public EncryptResult Encrypt(EncryptFileInfo fileInfo)
42 | {
43 | if (fileInfo.BundleName.Contains("_gameres_audio"))
44 | {
45 | var fileData = File.ReadAllBytes(fileInfo.FilePath);
46 | for (int i = 0; i < fileData.Length; i++)
47 | {
48 | fileData[i] ^= BundleStream.KEY;
49 | }
50 |
51 | EncryptResult result = new EncryptResult();
52 | result.Encrypted = true;
53 | result.EncryptedData = fileData;
54 | return result;
55 | }
56 | else
57 | {
58 | EncryptResult result = new EncryptResult();
59 | result.Encrypted = false;
60 | return result;
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/Scripts/Editor/Encryption.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 339682333f36d014e942a790dea6b1f7
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Editor/SangoUtils_Patch_YooAsset.Editor.asmdef:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SangoUtils_Patch_YooAsset.Editor",
3 | "rootNamespace": "",
4 | "references": [
5 | "GUID:19c91f21cad552f428e76ba715f6e221",
6 | "GUID:e34a5702dd353724aa315fb8011f08c3"
7 | ],
8 | "includePlatforms": [
9 | "Editor"
10 | ],
11 | "excludePlatforms": [],
12 | "allowUnsafeCode": false,
13 | "overrideReferences": false,
14 | "precompiledReferences": [],
15 | "autoReferenced": true,
16 | "defineConstraints": [],
17 | "versionDefines": [],
18 | "noEngineReferences": false
19 | }
--------------------------------------------------------------------------------
/Scripts/Editor/SangoUtils_Patch_YooAsset.Editor.asmdef.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 6463a4f8222b0e94d8d2deb44b49d5c0
3 | AssemblyDefinitionImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Scripts/Runtime.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: b76f24dc5a0e97944bfff699e80e57f0
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 64f6f1179a786e542927bb2f03ca3383
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_ClearPackageCache.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using YooAsset;
3 |
4 | namespace SangoUtils.Patchs_YooAsset
5 | {
6 | internal class PatchOperationOP_ClearPackageCache : PatchOperationOP_Base
7 | {
8 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.ClearPackageCache;
9 |
10 | internal override void OnEvent()
11 | {
12 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchStatesChange, "清理未使用的缓存文件!"));
13 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
14 | var package = YooAssets.GetPackage(packageName);
15 | var operation = package.ClearUnusedCacheFilesAsync();
16 | operation.Completed += Operation_Completed;
17 | }
18 |
19 | private void Operation_Completed(AsyncOperationBase obj)
20 | {
21 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.LoadHotfixDlls));
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_ClearPackageCache.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1de29b1e066adf645ae56a59ca3f6cec
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_CreatePackageDownloader.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System.Collections;
3 | using UnityEngine;
4 | using YooAsset;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | internal class PatchOperationOP_CreatePackageDownloader : PatchOperationOP_Base
9 | {
10 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.CreatePackageDownloader;
11 |
12 | internal override void OnEvent()
13 | {
14 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchStatesChange, "创建补丁下载器!"));
15 | CreateDownloader().Start();
16 | }
17 |
18 | private IEnumerator CreateDownloader()
19 | {
20 | yield return new WaitForSecondsRealtime(0.5f);
21 |
22 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
23 | var package = YooAssets.GetPackage(packageName);
24 | int downloadingMaxNum = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.DownloadingMaxNum;
25 | int failedTryAgain = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.FailedTryAgain;
26 | int timeout = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.Timeout;
27 | var downloader = package.CreateResourceDownloader(downloadingMaxNum, failedTryAgain, timeout);
28 |
29 | EventBus_Patchs.PatchOperation.PatchOperationData.ResourceDownloaderOperation = downloader;
30 |
31 | if (downloader.TotalDownloadCount == 0)
32 | {
33 | Debug.Log("Not found any download files !");
34 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.ClearPackageCache));
35 | }
36 | else
37 | {
38 | // 发现新更新文件后,挂起流程系统
39 | // 注意:开发者需要在下载前检测磁盘空间不足
40 | int totalDownloadCount = downloader.TotalDownloadCount;
41 | long totalDownloadBytes = downloader.TotalDownloadBytes;
42 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.FoundUpdateFiles, totalDownloadCount, totalDownloadBytes));
43 | }
44 | }
45 | }
46 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_CreatePackageDownloader.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 3f7811aa154668147b4a57e540542f67
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_DownloadPackageFiles.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System.Collections;
3 | using YooAsset;
4 |
5 | namespace SangoUtils.Patchs_YooAsset
6 | {
7 | internal class PatchOperationOP_DownloadPackageFiles : PatchOperationOP_Base
8 | {
9 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.DownloadPackageFiles;
10 |
11 | internal override void OnEvent()
12 | {
13 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchStatesChange, "开始下载补丁文件!"));
14 | BeginDownload().Start();
15 | }
16 |
17 | private IEnumerator BeginDownload()
18 | {
19 | var downloader = EventBus_Patchs.PatchOperation.PatchOperationData.ResourceDownloaderOperation;
20 | downloader.OnDownloadErrorCallback = delegate (string fileName, string error)
21 | {
22 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.WebFileDownloadFailed, fileName, error));
23 | };
24 | downloader.OnDownloadProgressCallback = delegate (int totalDownloadCount, int currentDownloadCount, long totalDownloadSizeBytes, long currentDownloadSizeBytes)
25 | {
26 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystem_DownloadProgressUpdateEventArgs
27 | (totalDownloadCount, currentDownloadCount, totalDownloadSizeBytes, currentDownloadSizeBytes));
28 | };
29 | downloader.BeginDownload();
30 | yield return downloader;
31 |
32 | if (downloader.Status != EOperationStatus.Succeed)
33 | yield break;
34 |
35 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.DownloadPackageOver));
36 | }
37 | }
38 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_DownloadPackageFiles.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 4cc05630bcfadaa42ae14e1889f1a725
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_DownloadPackageOver.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 |
3 | namespace SangoUtils.Patchs_YooAsset
4 | {
5 | internal class PatchOperationOP_DownloadPackageOver : PatchOperationOP_Base
6 | {
7 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.DownloadPackageOver;
8 |
9 | internal override void OnEvent()
10 | {
11 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.ClearPackageCache));
12 | }
13 | }
14 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_DownloadPackageOver.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d20254db9f3efc544af97b53a68817ab
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_InitializePackage.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System.Collections;
3 | using System.IO;
4 | using UnityEngine;
5 | using YooAsset;
6 |
7 | namespace SangoUtils.Patchs_YooAsset
8 | {
9 | internal class PatchOperationOP_InitializePackage : PatchOperationOP_Base
10 | {
11 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.InitializePackage;
12 |
13 | internal override void OnEvent()
14 | {
15 | InitPackage().Start();
16 | }
17 |
18 | private IEnumerator InitPackage()
19 | {
20 | EPlayMode playMode = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PlayMode;
21 | string packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
22 | string buildPipeline = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.BuildPipeline.ToString();
23 |
24 | var package = YooAssets.TryGetPackage(packageName);
25 | if (package == null)
26 | package = YooAssets.CreatePackage(packageName);
27 |
28 | InitializationOperation initializationOperation = null;
29 | if (playMode == EPlayMode.EditorSimulateMode)
30 | {
31 | var createParameters = new EditorSimulateModeParameters();
32 | createParameters.SimulateManifestFilePath = EditorSimulateModeHelper.SimulateBuild(buildPipeline, packageName);
33 | initializationOperation = package.InitializeAsync(createParameters);
34 | }
35 |
36 | if (playMode == EPlayMode.OfflinePlayMode)
37 | {
38 | var createParameters = new OfflinePlayModeParameters();
39 | createParameters.DecryptionServices = new FileStreamDecryption();
40 | initializationOperation = package.InitializeAsync(createParameters);
41 | }
42 |
43 | if (playMode == EPlayMode.HostPlayMode)
44 | {
45 | string defaultHostServer = GetHostServerURL();
46 | string fallbackHostServer = GetHostServerURL();
47 | var createParameters = new HostPlayModeParameters();
48 | createParameters.DecryptionServices = new FileStreamDecryption();
49 | createParameters.BuildinQueryServices = new GameQueryServices();
50 | createParameters.RemoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
51 | initializationOperation = package.InitializeAsync(createParameters);
52 | }
53 |
54 | if (playMode == EPlayMode.WebPlayMode)
55 | {
56 | string defaultHostServer = GetHostServerURL();
57 | string fallbackHostServer = GetHostServerURL();
58 | var createParameters = new WebPlayModeParameters();
59 | createParameters.DecryptionServices = new FileStreamDecryption();
60 | createParameters.BuildinQueryServices = new GameQueryServices();
61 | createParameters.RemoteServices = new RemoteServices(defaultHostServer, fallbackHostServer);
62 | initializationOperation = package.InitializeAsync(createParameters);
63 | }
64 |
65 | yield return initializationOperation;
66 |
67 | if (initializationOperation.Status != EOperationStatus.Succeed)
68 | {
69 | Debug.LogWarning($"{initializationOperation.Error}");
70 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.InitializeFailed));
71 | }
72 | else
73 | {
74 | Debug.Log($"Init resource package version : {initializationOperation?.PackageVersion}");
75 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.UpdatePackageVersion));
76 | }
77 | }
78 |
79 | private string GetHostServerURL()
80 | {
81 | string hostServerIP = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.HostServerIP;
82 | string appID = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.AppID;
83 | string appVersion = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.AppVersion;
84 |
85 | #if UNITY_EDITOR
86 | if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android)
87 | return $"{hostServerIP}/CDN/Editor/Unity/{appID}/Patch/Android/{appVersion}";
88 | else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS)
89 | return $"{hostServerIP}/CDN/Editor/Unity/{appID}/Patch/IOS/{appVersion}";
90 | else if (UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL)
91 | return $"{hostServerIP}/CDN/Editor/Unity/{appID}/Patch/WebGL/{appVersion}";
92 | else
93 | return $"{hostServerIP}/CDN/Editor/Unity/{appID}/Patch/PC/{appVersion}";
94 | #else
95 | if (Application.platform == RuntimePlatform.Android)
96 | return $"{hostServerIP}/CDN/Online/Unity/{appID}/Patch/Android/{appVersion}";
97 | else if (Application.platform == RuntimePlatform.IPhonePlayer)
98 | return $"{hostServerIP}/CDN/Online/Unity/{appID}/Patch/IOS/{appVersion}";
99 | else if (Application.platform == RuntimePlatform.WebGLPlayer)
100 | return $"{hostServerIP}/CDN/Online/Unity/{appID}/Patch/WebGL/{appVersion}";
101 | else
102 | return $"{hostServerIP}/CDN/Online/Unity/{appID}/Patch/PC/{appVersion}";
103 | #endif
104 | }
105 |
106 | private class RemoteServices : IRemoteServices
107 | {
108 | private readonly string _defaultHostServer;
109 | private readonly string _fallbackHostServer;
110 |
111 | public RemoteServices(string defaultHostServer, string fallbackHostServer)
112 | {
113 | _defaultHostServer = defaultHostServer;
114 | _fallbackHostServer = fallbackHostServer;
115 | }
116 | string IRemoteServices.GetRemoteMainURL(string fileName)
117 | {
118 | return $"{_defaultHostServer}/{fileName}";
119 | }
120 | string IRemoteServices.GetRemoteFallbackURL(string fileName)
121 | {
122 | return $"{_fallbackHostServer}/{fileName}";
123 | }
124 | }
125 |
126 | private class FileStreamDecryption : IDecryptionServices
127 | {
128 | AssetBundle IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo, out Stream managedStream)
129 | {
130 | BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read);
131 | managedStream = bundleStream;
132 | return AssetBundle.LoadFromStream(bundleStream, fileInfo.ConentCRC, GetManagedReadBufferSize());
133 | }
134 |
135 | AssetBundleCreateRequest IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo, out Stream managedStream)
136 | {
137 | BundleStream bundleStream = new BundleStream(fileInfo.FileLoadPath, FileMode.Open, FileAccess.Read, FileShare.Read);
138 | managedStream = bundleStream;
139 | return AssetBundle.LoadFromStreamAsync(bundleStream, fileInfo.ConentCRC, GetManagedReadBufferSize());
140 | }
141 |
142 | private static uint GetManagedReadBufferSize()
143 | {
144 | return 1024;
145 | }
146 | }
147 |
148 | private class FileOffsetDecryption : IDecryptionServices
149 | {
150 | AssetBundle IDecryptionServices.LoadAssetBundle(DecryptFileInfo fileInfo, out Stream managedStream)
151 | {
152 | managedStream = null;
153 | return AssetBundle.LoadFromFile(fileInfo.FileLoadPath, fileInfo.ConentCRC, GetFileOffset());
154 | }
155 |
156 | AssetBundleCreateRequest IDecryptionServices.LoadAssetBundleAsync(DecryptFileInfo fileInfo, out Stream managedStream)
157 | {
158 | managedStream = null;
159 | return AssetBundle.LoadFromFileAsync(fileInfo.FileLoadPath, fileInfo.ConentCRC, GetFileOffset());
160 | }
161 |
162 | private static ulong GetFileOffset()
163 | {
164 | return 32;
165 | }
166 | }
167 | }
168 |
169 | public class BundleStream : FileStream
170 | {
171 | public const byte KEY = 64;
172 |
173 | public BundleStream(string path, FileMode mode, FileAccess access, FileShare share) : base(path, mode, access, share)
174 | {
175 | }
176 | public BundleStream(string path, FileMode mode) : base(path, mode)
177 | {
178 | }
179 |
180 | public override int Read(byte[] array, int offset, int count)
181 | {
182 | var index = base.Read(array, offset, count);
183 | for (int i = 0; i < array.Length; i++)
184 | {
185 | array[i] ^= KEY;
186 | }
187 | return index;
188 | }
189 | }
190 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_InitializePackage.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: c68af4de50328424090ae1e6b5a03582
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdateLoadHotfixDll.cs:
--------------------------------------------------------------------------------
1 | using HybridCLR;
2 | using SangoUtils.Patchs_YooAsset.Utils;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using UnityEngine;
6 | using YooAsset;
7 |
8 | namespace SangoUtils.Patchs_YooAsset
9 | {
10 | internal class PatchOperationOP_UpdateLoadHotfixDll : PatchOperationOP_Base
11 | {
12 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.LoadHotfixDlls;
13 |
14 | internal override void OnEvent()
15 | {
16 | EnterSangoGameRoot();
17 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.UpdaterDone));
18 | }
19 |
20 | #region EnterGameRoot
21 | internal void EnterSangoGameRoot()
22 | {
23 | var HotDllList = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.HotUpdateDllList;
24 | var AOTMetaAssemblyNames = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.AOTMetaAssemblyNames;
25 |
26 | LoadDll(AOTMetaAssemblyNames, HotDllList);
27 | LoadMetadataForAOTAssemblies(AOTMetaAssemblyNames);
28 |
29 | #if !UNITY_EDITOR
30 | LoadHotAssembly(HotDllList);
31 | #endif
32 | }
33 |
34 | #endregion
35 |
36 |
37 | //获取资源二进制
38 | private static Dictionary _dllAssetDataDict = new Dictionary();
39 | private static byte[] GetAssetData(string dllName)
40 | {
41 | return _dllAssetDataDict[dllName];
42 | }
43 |
44 | #region LoadAssemblies
45 | internal void LoadDll(List AOTMetaAssemblyNames, List HotDllList)
46 | {
47 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
48 |
49 | var dllNameList = new List().Concat(AOTMetaAssemblyNames).Concat(HotDllList);
50 | foreach (var dllName in dllNameList)
51 | {
52 | byte[] fileData = SangoAssetService.Instance.LoadTextAsset(packageName, dllName, true).bytes;
53 | _dllAssetDataDict.Add(dllName, fileData);
54 | Debug.Log($"dll:{dllName} size:{fileData.Length}");
55 | }
56 | }
57 |
58 | ///
59 | /// 为aot assembly加载原始metadata, 这个代码放aot或者热更新都行。
60 | /// 一旦加载后,如果AOT泛型函数对应native实现不存在,则自动替换为解释模式执行
61 | ///
62 | internal static void LoadMetadataForAOTAssemblies(List AOTMetaAssemblyNames)
63 | {
64 | // 可以加载任意aot assembly的对应的dll。但要求dll必须与unity build过程中生成的裁剪后的dll一致,而不能直接使用原始dll。
65 | // 我们在BuildProcessors里添加了处理代码,这些裁剪后的dll在打包时自动被复制到 {项目目录}/HybridCLRData/AssembliesPostIl2CppStrip/{Target} 目录。
66 |
67 | /// 注意,补充元数据是给AOT dll补充元数据,而不是给热更新dll补充元数据。
68 | /// 热更新dll不缺元数据,不需要补充,如果调用LoadMetadataForAOTAssembly会返回错误
69 | ///
70 | HomologousImageMode mode = HomologousImageMode.SuperSet;
71 | foreach (var aotDllName in AOTMetaAssemblyNames)
72 | {
73 | byte[] dllBytes = GetAssetData(aotDllName);
74 | // 加载assembly对应的dll,会自动为它hook。一旦aot泛型函数的native函数不存在,用解释器版本代码
75 | LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, mode);
76 | Debug.Log($"LoadMetadataForAOTAssembly:{aotDllName}. mode:{mode} return:{err}");
77 | }
78 | }
79 |
80 | internal static void LoadHotAssembly(List HotDllList)
81 | {
82 | for (int i = 0; i < HotDllList.Count; i++)
83 | {
84 | System.Reflection.Assembly.Load(GetAssetData(HotDllList[i]));
85 | }
86 | }
87 |
88 | #endregion
89 | }
90 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdateLoadHotfixDll.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 7361168002281fc4a97738c8b4f181e8
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdatePackageManifest.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System.Collections;
3 | using UnityEngine;
4 | using YooAsset;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | internal class PatchOperationOP_UpdatePackageManifest : PatchOperationOP_Base
9 | {
10 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.UpdatePackageManifest;
11 |
12 | internal override void OnEvent()
13 | {
14 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchStatesChange, "更新资源清单!"));
15 | UpdateManifest().Start();
16 | }
17 |
18 | private IEnumerator UpdateManifest()
19 | {
20 | yield return new WaitForSecondsRealtime(0.5f);
21 |
22 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
23 | var packageVersion = EventBus_Patchs.PatchOperation.PatchOperationData.PackageVersion;
24 | var timeout = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.Timeout;
25 | var package = YooAssets.GetPackage(packageName);
26 | bool savePackageVersion = true;
27 | var operation = package.UpdatePackageManifestAsync(packageVersion, savePackageVersion, timeout);
28 | yield return operation;
29 |
30 | if (operation.Status != EOperationStatus.Succeed)
31 | {
32 | Debug.LogWarning(operation.Error);
33 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchManifestUpdateFailed));
34 | yield break;
35 | }
36 | else
37 | {
38 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.CreatePackageDownloader));
39 | }
40 | }
41 | }
42 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdatePackageManifest.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: be131e507c994df45a97a2254fa22b53
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdatePackageVersion.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System.Collections;
3 | using UnityEngine;
4 | using YooAsset;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | internal class PatchOperationOP_UpdatePackageVersion : PatchOperationOP_Base
9 | {
10 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.UpdatePackageVersion;
11 |
12 | internal override void OnEvent()
13 | {
14 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PatchStatesChange, "获取最新的资源版本!"));
15 | UpdatePackageVersion().Start();
16 | }
17 |
18 | private IEnumerator UpdatePackageVersion()
19 | {
20 | yield return new WaitForSecondsRealtime(0.5f);
21 |
22 | var appendTimeTicks = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.AppendTimeTicks;
23 | var timeout = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.Timeout;
24 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
25 | var package = YooAssets.GetPackage(packageName);
26 | var operation = package.UpdatePackageVersionAsync(appendTimeTicks, timeout);
27 | yield return operation;
28 |
29 | if (operation.Status != EOperationStatus.Succeed)
30 | {
31 | Debug.LogWarning(operation.Error);
32 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.PackageVersionUpdateFailed));
33 | }
34 | else
35 | {
36 | EventBus_Patchs.PatchOperation.PatchOperationData.PackageVersion = operation.PackageVersion;
37 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.UpdatePackageManifest));
38 | }
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdatePackageVersion.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bd1b5543d684df142b12c2ce7a7ec2ea
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdaterDone.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using UnityEngine;
3 | using YooAsset;
4 |
5 | namespace SangoUtils.Patchs_YooAsset
6 | {
7 | internal class PatchOperationOP_UpdaterDone : PatchOperationOP_Base
8 | {
9 | internal override PatchOperationEventCode PatchOperationEventCode => PatchOperationEventCode.UpdaterDone;
10 |
11 | internal override void OnEvent()
12 | {
13 | LoadGameRootObject();
14 | EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.OnUpdaterDone?.Invoke();
15 | }
16 |
17 | private void LoadGameRootObject()
18 | {
19 | var packageName = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.PackageName;
20 | var package = YooAssets.GetPackage(packageName);
21 | var GameRootObject = EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.GameRootObjectName;
22 | var asset1 = package.LoadAssetSync(GameRootObject);
23 | var asset1Transform = GameObject.Find(EventBus_Patchs.PatchOperation.PatchOperationData.PatchConfig.GameRootParentTransform).transform;
24 | asset1.InstantiateSync(new Vector3(0, 0, 0), Quaternion.identity, asset1Transform);
25 | }
26 | }
27 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchOperationOP/PatchOperationOP_UpdaterDone.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 843b255bbf84f9e40867839071da7e83
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 220f12635322d944a8fd2a404490319f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/EventBus_Patchs.cs:
--------------------------------------------------------------------------------
1 | namespace SangoUtils.Patchs_YooAsset.Utils
2 | {
3 | internal static class EventBus_Patchs
4 | {
5 | internal static SangoPatchRoot SangoPatchRoot { get; set; }
6 | internal static PatchOperation PatchOperation { get; set; }
7 | internal static PatchOperationData PatchOperationData { get; set; }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/EventBus_Patchs.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 32bb9dd5ebfe1944d9902c847901ec46
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchOperation.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System;
3 | using System.Collections.Generic;
4 | using YooAsset;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | internal class PatchOperation : GameAsyncOperation
9 | {
10 | private readonly SangoPatchConfig _currentPatchConfig;
11 |
12 | private event EventHandler _onPatchUserEventHandler;
13 | private event EventHandler _onPatchOperationEventHandler;
14 |
15 | internal PatchOperationData PatchOperationData { get; set; }
16 |
17 | private readonly Dictionary _patchOperationOPs = new Dictionary();
18 |
19 | internal PatchOperation(SangoPatchConfig patchConfig)
20 | {
21 | _currentPatchConfig = patchConfig;
22 | EventBus_Patchs.PatchOperation = this;
23 | _onPatchUserEventHandler += C_OnPatchUserEvent;
24 | _onPatchOperationEventHandler += C_OnPatchOperationEvent;
25 | AddPatchOperationOPs();
26 | }
27 |
28 | internal void SendMessage(object sender, PatchUserEventArgs eventArgs)
29 | {
30 | _onPatchUserEventHandler?.Invoke(sender, eventArgs);
31 | }
32 |
33 | internal void SendMessage(object sender, PatchOperationEventArgs eventArgs)
34 | {
35 | _onPatchOperationEventHandler?.Invoke(sender, eventArgs);
36 | }
37 |
38 | protected override void OnStart()
39 | {
40 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.InitializePackage));
41 | }
42 |
43 | protected override void OnUpdate() { }
44 |
45 | protected override void OnAbort() { }
46 |
47 | private void AddPatchOperationOPs()
48 | {
49 | Add();
50 | Add();
51 | Add();
52 | Add();
53 | Add();
54 | Add();
55 | Add();
56 | Add();
57 | Add();
58 |
59 | PatchOperationData = new PatchOperationData(_currentPatchConfig);
60 |
61 | void Add() where T : PatchOperationOP_Base
62 | {
63 | T patchOperation = Activator.CreateInstance();
64 | _patchOperationOPs.Add(patchOperation.PatchOperationEventCode, patchOperation);
65 | }
66 | }
67 |
68 | private void C_OnPatchUserEvent(object sender, PatchUserEventArgs eventArgs)
69 | {
70 | switch (eventArgs.PatchUserEventCode)
71 | {
72 | case PatchUserEventCode.UserTryInitialize:
73 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.InitializePackage));
74 | break;
75 | case PatchUserEventCode.UserBeginDownloadWebFiles:
76 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.DownloadPackageFiles));
77 | break;
78 | case PatchUserEventCode.UserTryUpdatePackageVersion:
79 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.UpdatePackageVersion));
80 | break;
81 | case PatchUserEventCode.UserTryUpdatePatchManifest:
82 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.UpdatePackageManifest));
83 | break;
84 | case PatchUserEventCode.UserTryDownloadWebFiles:
85 | SendMessage(this, new PatchOperationEventArgs(PatchOperationEventCode.CreatePackageDownloader));
86 | break;
87 | }
88 | }
89 |
90 | private void C_OnPatchOperationEvent(object sender, PatchOperationEventArgs eventArgs)
91 | {
92 | if (_patchOperationOPs.TryGetValue(eventArgs.PatchOperationEventCode, out var patchOperationOP))
93 | {
94 | patchOperationOP.OnEvent();
95 | }
96 | if (eventArgs.PatchOperationEventCode == PatchOperationEventCode.UpdaterDone)
97 | {
98 | _onPatchUserEventHandler = null;
99 | Status = EOperationStatus.Succeed;
100 | }
101 | }
102 | }
103 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchOperation.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: fafa44b74779da344bf5c354f917a132
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchService.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System;
3 | using System.Collections;
4 | using UnityEngine;
5 | using UnityEngine.Networking;
6 | using YooAsset;
7 |
8 | namespace SangoUtils.Patchs_YooAsset
9 | {
10 | internal class PatchService : MonoBehaviour
11 | {
12 | private static PatchService _instance;
13 |
14 | internal static PatchService Instance
15 | {
16 | get
17 | {
18 | if (_instance == null)
19 | {
20 | _instance = FindObjectOfType(typeof(PatchService)) as PatchService;
21 | if (_instance == null)
22 | {
23 | GameObject gameObject = new GameObject("[" + typeof(PatchService).FullName + "]");
24 | _instance = gameObject.AddComponent();
25 | gameObject.hideFlags = HideFlags.HideInHierarchy;
26 | DontDestroyOnLoad(gameObject);
27 | }
28 | }
29 | return _instance;
30 | }
31 | }
32 |
33 | private void Awake()
34 | {
35 | if (null != _instance && _instance != this)
36 | {
37 | Destroy(gameObject);
38 | }
39 | }
40 |
41 | private SangoPatchConfig _currentPatchConfig;
42 |
43 | public Action OnPatchCompleted { get; set; }
44 |
45 | internal void Initialize(SangoPatchConfig patchConfig)
46 | {
47 | _currentPatchConfig = patchConfig;
48 | StartOperation().Start();
49 | }
50 |
51 | public UnityWebRequest CustomWebRequester(string url)
52 | {
53 | var request = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);
54 | if (_currentPatchConfig.SkipCertificate)
55 | {
56 | request.certificateHandler = new WebRequestSkipCertificate();
57 | }
58 | return request;
59 | }
60 |
61 | ///
62 | /// 跳过Web请求证书
63 | ///
64 | public class WebRequestSkipCertificate : CertificateHandler
65 | {
66 | protected override bool ValidateCertificate(byte[] certificateData)
67 | {
68 | return true;
69 | }
70 | }
71 |
72 | private IEnumerator StartOperation()
73 | {
74 | YooAssets.Initialize();
75 |
76 | YooAssets.SetDownloadSystemUnityWebRequest(CustomWebRequester);
77 |
78 | PatchOperation hotFixOperation = new PatchOperation(_currentPatchConfig);
79 | YooAssets.StartOperation(hotFixOperation);
80 | yield return hotFixOperation;
81 |
82 | ResourcePackage assetPackage = YooAssets.GetPackage(_currentPatchConfig.PackageName);
83 | YooAssets.SetDefaultPackage(assetPackage);
84 |
85 | EventBus_Patchs.SangoPatchRoot.SendMessage(this, new PatchSystemEventArgs(PatchSystemEventCode.ClosePatchWindow));
86 | OnPatchCompleted?.Invoke(true);
87 | }
88 | }
89 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchService.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: eb1bc15feeb10e940b707c426d6d9027
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchSystemEventMessages.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.Events;
5 | using YooAsset;
6 |
7 | namespace SangoUtils.Patchs_YooAsset
8 | {
9 | internal class PatchSystemEventArgs : EventArgs
10 | {
11 | internal PatchSystemEventArgs(PatchSystemEventCode patchSystemEventCode, params object[] data)
12 | {
13 | PatchSystemEventCode = patchSystemEventCode;
14 | ExtensionData = data;
15 | }
16 |
17 | internal PatchSystemEventCode PatchSystemEventCode { get; }
18 | internal object[] ExtensionData { get; }
19 | }
20 |
21 | internal enum PatchSystemEventCode
22 | {
23 | InitializeFailed,
24 | PatchStatesChange,
25 | FoundUpdateFiles,
26 | PackageVersionUpdateFailed,
27 | PatchManifestUpdateFailed,
28 | WebFileDownloadFailed,
29 | ClosePatchWindow
30 | }
31 |
32 | internal class PatchSystem_DownloadProgressUpdateEventArgs : EventArgs
33 | {
34 | public PatchSystem_DownloadProgressUpdateEventArgs(int totalDownloadCount, int currentDownloadCount, long totalDownloadSizeBytes, long currentDownloadSizeBytes)
35 | {
36 | TotalDownloadCount = totalDownloadCount;
37 | CurrentDownloadCount = currentDownloadCount;
38 | TotalDownloadSizeBytes = totalDownloadSizeBytes;
39 | CurrentDownloadSizeBytes = currentDownloadSizeBytes;
40 | }
41 |
42 | internal int TotalDownloadCount { get; }
43 | internal int CurrentDownloadCount { get; }
44 | internal long TotalDownloadSizeBytes { get; }
45 | internal long CurrentDownloadSizeBytes { get; }
46 | }
47 |
48 | internal class PatchUserEventArgs : EventArgs
49 | {
50 | internal PatchUserEventArgs(PatchUserEventCode patchUserEventCode)
51 | {
52 | PatchUserEventCode = patchUserEventCode;
53 | }
54 |
55 | internal PatchUserEventCode PatchUserEventCode { get; }
56 | }
57 |
58 | internal enum PatchUserEventCode
59 | {
60 | UserTryInitialize,
61 | UserBeginDownloadWebFiles,
62 | UserTryUpdatePackageVersion,
63 | UserTryUpdatePatchManifest,
64 | UserTryDownloadWebFiles
65 | }
66 |
67 | internal class PatchOperationEventArgs : EventArgs
68 | {
69 | internal PatchOperationEventArgs(PatchOperationEventCode patchOperationEventCode)
70 | {
71 | PatchOperationEventCode = patchOperationEventCode;
72 | }
73 |
74 | internal PatchOperationEventCode PatchOperationEventCode { get; }
75 | }
76 |
77 | internal enum PatchOperationEventCode
78 | {
79 | InitializePackage,
80 | UpdatePackageVersion,
81 | UpdatePackageManifest,
82 | CreatePackageDownloader,
83 | DownloadPackageFiles,
84 | DownloadPackageOver,
85 | ClearPackageCache,
86 | LoadHotfixDlls,
87 | UpdaterDone
88 | }
89 |
90 | internal abstract class PatchOperationOP_Base
91 | {
92 | internal abstract PatchOperationEventCode PatchOperationEventCode { get; }
93 |
94 | internal abstract void OnEvent();
95 | }
96 |
97 | internal class PatchOperationData
98 | {
99 | internal SangoPatchConfig PatchConfig { get; set; }
100 |
101 | internal string PackageVersion { get; set; }
102 | internal ResourceDownloaderOperation ResourceDownloaderOperation { get; set; }
103 |
104 | internal PatchOperationData(SangoPatchConfig patchConfig)
105 | {
106 | PatchConfig = patchConfig;
107 | }
108 | }
109 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PatchService/PatchSystemEventMessages.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5f59e04a0159dc9499b25ff17c44826c
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 90d7636529747bc43aea914f2fc89d59
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoAssetService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.Video;
5 | using YooAsset;
6 |
7 | namespace SangoUtils.Patchs_YooAsset
8 | {
9 | public class SangoAssetService : MonoBehaviour
10 | {
11 | private static SangoAssetService _instance;
12 |
13 | public static SangoAssetService Instance
14 | {
15 | get
16 | {
17 | if (_instance == null)
18 | {
19 | _instance = FindObjectOfType(typeof(SangoAssetService)) as SangoAssetService;
20 | if (_instance == null)
21 | {
22 | GameObject gameObject = new GameObject("[" + typeof(SangoAssetService).FullName + "]");
23 | _instance = gameObject.AddComponent();
24 | gameObject.hideFlags = HideFlags.HideInHierarchy;
25 | DontDestroyOnLoad(gameObject);
26 | }
27 | }
28 | return _instance;
29 | }
30 | }
31 |
32 | private void Awake()
33 | {
34 | if (null != _instance && _instance != this)
35 | {
36 | Destroy(gameObject);
37 | }
38 | }
39 |
40 | private List _cacheAssetHandles = new();
41 |
42 | private Dictionary _audioClipHandleDict = new();
43 | private Dictionary _textAssetHandleDict = new();
44 | private Dictionary _videoClipHandleDict = new();
45 | private Dictionary _spriteHandleDict = new();
46 | private Dictionary _prefabHandleDict = new();
47 |
48 | public void Initialize()
49 | {
50 | _audioClipHandleDict.Clear();
51 | _textAssetHandleDict.Clear();
52 | _videoClipHandleDict.Clear();
53 | _spriteHandleDict.Clear();
54 | _prefabHandleDict.Clear();
55 | }
56 |
57 | public AudioClip LoadAudioClip(string packageName, string audioClipPath, bool isCache)
58 | {
59 | AudioClip audioClip = null;
60 | _audioClipHandleDict.TryGetValue(audioClipPath, out AssetHandle handle);
61 | if (handle == null)
62 | {
63 | var package = YooAssets.GetPackage(packageName);
64 | handle = package.LoadAssetSync(audioClipPath);
65 | audioClip = handle.AssetObject as AudioClip;
66 | if (isCache)
67 | {
68 | if (!_audioClipHandleDict.ContainsKey(audioClipPath))
69 | {
70 | _audioClipHandleDict.Add(audioClipPath, handle);
71 | }
72 | }
73 | else
74 | {
75 | GCAssetHandleTODO(handle);
76 | }
77 | }
78 | else
79 | {
80 | audioClip = handle.AssetObject as AudioClip;
81 | }
82 | return audioClip;
83 | }
84 |
85 | public TextAsset LoadTextAsset(string packageName, string textAssetPath, bool isCache)
86 | {
87 | TextAsset textAsset = null;
88 | _textAssetHandleDict.TryGetValue(textAssetPath, out AssetHandle handle);
89 | if (handle == null)
90 | {
91 | var package = YooAssets.GetPackage(packageName);
92 | handle = package.LoadAssetSync(textAssetPath);
93 | textAsset = handle.AssetObject as TextAsset;
94 | if (isCache)
95 | {
96 | if (!_textAssetHandleDict.ContainsKey(textAssetPath))
97 | {
98 | _textAssetHandleDict.Add(textAssetPath, handle);
99 | }
100 | }
101 | else
102 | {
103 | GCAssetHandleTODO(handle);
104 | }
105 | }
106 | else
107 | {
108 | textAsset = handle.AssetObject as TextAsset;
109 | }
110 | return textAsset;
111 | }
112 |
113 | public void LoadAudioClipASync(string packageName, string audioClipPath, Action assetLoadedCallBack, bool isCache)
114 | {
115 | AudioClip audioClip = null;
116 | _audioClipHandleDict.TryGetValue(audioClipPath, out AssetHandle handle);
117 | if (handle == null)
118 | {
119 | var package = YooAssets.GetPackage(packageName);
120 | handle = package.LoadAssetAsync(audioClipPath);
121 | handle.Completed += (handle) =>
122 | {
123 | audioClip = handle.AssetObject as AudioClip;
124 | assetLoadedCallBack?.Invoke(audioClip);
125 | if (isCache)
126 | {
127 | if (!_audioClipHandleDict.ContainsKey(audioClipPath))
128 | {
129 | _audioClipHandleDict.Add(audioClipPath, handle);
130 | }
131 | }
132 | else
133 | {
134 | GCAssetHandleTODO(handle);
135 | }
136 | };
137 | }
138 | else
139 | {
140 | audioClip = handle.AssetObject as AudioClip;
141 | assetLoadedCallBack?.Invoke(audioClip);
142 | }
143 | }
144 |
145 | public VideoClip LoadVideoClip(string packageName, string videoClipPath, bool isCache)
146 | {
147 | VideoClip videoClip = null;
148 | _videoClipHandleDict.TryGetValue(videoClipPath, out AssetHandle handle);
149 | if (handle == null)
150 | {
151 | var package = YooAssets.GetPackage(packageName);
152 | handle = package.LoadAssetSync(videoClipPath);
153 | videoClip = handle.AssetObject as VideoClip;
154 | if (isCache)
155 | {
156 | if (!_videoClipHandleDict.ContainsKey(videoClipPath))
157 | {
158 | _videoClipHandleDict.Add(videoClipPath, handle);
159 | }
160 | }
161 | else
162 | {
163 | GCAssetHandleTODO(handle);
164 | }
165 | }
166 | else
167 | {
168 | videoClip = handle.AssetObject as VideoClip;
169 | }
170 | return videoClip;
171 | }
172 |
173 | public void LoadVideoClipASync(string packageName, string videoClipPath, Action assetLoadedCallBack, bool isCache)
174 | {
175 | VideoClip videoClip = null;
176 | _videoClipHandleDict.TryGetValue(videoClipPath, out AssetHandle handle);
177 | if (handle == null)
178 | {
179 | var package = YooAssets.GetPackage(packageName);
180 | handle = package.LoadAssetAsync(videoClipPath);
181 | handle.Completed += (handle) =>
182 | {
183 | videoClip = handle.AssetObject as VideoClip;
184 | assetLoadedCallBack?.Invoke(videoClip);
185 | if (isCache)
186 | {
187 | if (!_videoClipHandleDict.ContainsKey(videoClipPath))
188 | {
189 | _videoClipHandleDict.Add(videoClipPath, handle);
190 | }
191 | }
192 | else
193 | {
194 | GCAssetHandleTODO(handle);
195 | }
196 | };
197 | }
198 | else
199 | {
200 | videoClip = handle.AssetObject as VideoClip;
201 | assetLoadedCallBack?.Invoke(videoClip);
202 | }
203 | }
204 |
205 | public GameObject LoadPrefab(string packageName, string prefabPath, bool isCache)
206 | {
207 | GameObject prefab = null;
208 | _prefabHandleDict.TryGetValue(prefabPath, out AssetHandle handle);
209 | if (handle == null)
210 | {
211 | var package = YooAssets.GetPackage(packageName);
212 | handle = package.LoadAssetSync(prefabPath);
213 | prefab = handle.AssetObject as GameObject;
214 | if (isCache)
215 | {
216 | if (!_prefabHandleDict.ContainsKey(prefabPath))
217 | {
218 | _prefabHandleDict.Add(prefabPath, handle);
219 | }
220 | }
221 | else
222 | {
223 | GCAssetHandleTODO(handle);
224 | }
225 | }
226 | else
227 | {
228 | prefab = handle.AssetObject as GameObject;
229 | }
230 | return prefab;
231 | }
232 |
233 | public void LoadPrefabASync(string packageName, string prefabPath, Action assetLoadedCallBack, bool isCache)
234 | {
235 | GameObject prefab = null;
236 | _prefabHandleDict.TryGetValue(prefabPath, out AssetHandle handle);
237 | if (handle == null)
238 | {
239 | var package = YooAssets.GetPackage(packageName);
240 | handle = package.LoadAssetAsync(prefabPath);
241 | handle.Completed += (handle) =>
242 | {
243 | prefab = handle.AssetObject as GameObject;
244 | assetLoadedCallBack?.Invoke(prefab);
245 | if (isCache)
246 | {
247 | if (!_prefabHandleDict.ContainsKey(prefabPath))
248 | {
249 | _prefabHandleDict.Add(prefabPath, handle);
250 | }
251 | }
252 | else
253 | {
254 | GCAssetHandleTODO(handle);
255 | }
256 | };
257 | }
258 | else
259 | {
260 | prefab = handle.AssetObject as GameObject;
261 | assetLoadedCallBack?.Invoke(prefab);
262 | }
263 | }
264 |
265 | public GameObject InstantiatePrefab(string packageName, Transform parentTrans, string prefabPath, bool isCache)
266 | {
267 | GameObject prefab = LoadPrefab(packageName, prefabPath, isCache);
268 | GameObject instantiatedPrefab = Instantiate(prefab, parentTrans);
269 | return instantiatedPrefab;
270 | }
271 |
272 | public void InstantiatePrefabASync(string packageName, Transform parentTrans, string prefabPath, Action assetLoadedCallBack, bool isCache)
273 | {
274 | GameObject prefab = null;
275 | _prefabHandleDict.TryGetValue(prefabPath, out AssetHandle handle);
276 | if (handle == null)
277 | {
278 | var package = YooAssets.GetPackage(packageName);
279 | handle = package.LoadAssetAsync(prefabPath);
280 | handle.Completed += (handle) =>
281 | {
282 | prefab = handle.InstantiateSync(parentTrans);
283 | assetLoadedCallBack?.Invoke(prefab);
284 | if (isCache)
285 | {
286 | if (!_prefabHandleDict.ContainsKey(prefabPath))
287 | {
288 | _prefabHandleDict.Add(prefabPath, handle);
289 | }
290 | }
291 | else
292 | {
293 | GCAssetHandleTODO(handle);
294 | }
295 | };
296 | }
297 | else
298 | {
299 | prefab = handle.AssetObject as GameObject;
300 | assetLoadedCallBack?.Invoke(prefab);
301 | }
302 | }
303 |
304 | private void GCAssetHandleTODO(AssetHandle assetHandle)
305 | {
306 | _cacheAssetHandles.Add(assetHandle);
307 | }
308 |
309 | public void ReleaseAssetHandles()
310 | {
311 | for (int i = 0; i < _cacheAssetHandles.Count; i++)
312 | {
313 | _cacheAssetHandles[i].Release();
314 | }
315 | _cacheAssetHandles.Clear();
316 | }
317 |
318 | #region UnloadAsset
319 | // 卸载所有引用计数为零的资源包。
320 | // 可以在切换场景之后调用资源释放方法或者写定时器间隔时间去释放。
321 | public void UnloadUnusedAssets(string packageName)
322 | {
323 | var package = YooAssets.GetPackage(packageName);
324 | package.UnloadUnusedAssets();
325 | }
326 |
327 | // 尝试卸载指定的资源对象
328 | // 注意:如果该资源还在被使用,该方法会无效。
329 | public void TryUnloadUnusedAsset(string packageName, string path)
330 | {
331 | var package = YooAssets.GetPackage(packageName);
332 | package.TryUnloadUnusedAsset(path);
333 | }
334 |
335 | // 强制卸载所有资源包,该方法请在合适的时机调用。
336 | // 注意:Package在销毁的时候也会自动调用该方法。
337 | public void ForceUnloadAllAssets(string packageName)
338 | {
339 | var package = YooAssets.GetPackage(packageName);
340 | package.ForceUnloadAllAssets();
341 | }
342 |
343 | #endregion
344 | }
345 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoAssetService.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: dab0c275d576c9740a7466457a433d40
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoPatchConfig.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using UnityEngine;
3 | using UnityEngine.Events;
4 | using YooAsset;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | [CreateAssetMenu(fileName = "SangoPatchConfigAssets", menuName = "ScriptableObjects/Patchs_YooAsset/SangoPatchConfigAssets", order = 1)]
9 | public class SangoPatchConfig : ScriptableObject
10 | {
11 | public string HostServerIP;
12 | public string AppID;
13 | public string AppVersion;
14 | public bool AppendTimeTicks = true;
15 | public bool SkipCertificate = false;
16 | public int Timeout = 60;
17 | public int DownloadingMaxNum = 10;
18 | public int FailedTryAgain = 3;
19 |
20 | public string PackageName = "DefaultPackage";
21 | public EPlayMode PlayMode = EPlayMode.EditorSimulateMode;
22 | public EDefaultBuildPipeline BuildPipeline = EDefaultBuildPipeline.BuiltinBuildPipeline;
23 |
24 | public GameObject SangoPatchWnd;
25 | public string GameRootObjectName;
26 | public string GameRootParentTransform;
27 | public List HotUpdateDllList;
28 | public List AOTMetaAssemblyNames;
29 |
30 | public UnityEvent OnUpdaterDone;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoPatchConfig.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: bae4189d474187e488ca523c4fceb2a0
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoPatchRoot.cs:
--------------------------------------------------------------------------------
1 | using SangoUtils.Patchs_YooAsset.Utils;
2 | using System;
3 | using UnityEngine;
4 |
5 | namespace SangoUtils.Patchs_YooAsset
6 | {
7 | public class SangoPatchRoot : MonoBehaviour
8 | {
9 | private SangoPatchWnd _sangoPatchWnd;
10 |
11 | private event EventHandler _onPatchSystemEventHandler;
12 | private event EventHandler _onPatchSystemDownloadProgressUpdateEventHandler;
13 |
14 | public void Initialize(SangoPatchConfig config)
15 | {
16 | PatchService.Instance.Initialize(config);
17 | OnInit(config);
18 | }
19 |
20 | private void OnInit(SangoPatchConfig patchConfig)
21 | {
22 | var patchWndTransform = GameObject.Find(patchConfig.GameRootParentTransform).transform;
23 | GameObject patchWnd = Instantiate(patchConfig.SangoPatchWnd, new Vector3(0, 0, 0), Quaternion.identity, patchWndTransform);
24 |
25 | _sangoPatchWnd = patchWnd.AddComponent();
26 |
27 | EventBus_Patchs.SangoPatchRoot = this;
28 | _onPatchSystemEventHandler += C_OnPatchSystemEvent;
29 | _onPatchSystemDownloadProgressUpdateEventHandler += C_OnPatchSystemDownloadProgressUpdateEvent;
30 |
31 | _sangoPatchWnd.SetRoot(this);
32 | _sangoPatchWnd.gameObject.SetActive(true);
33 | _sangoPatchWnd.Initialize();
34 | }
35 |
36 | internal void SendMessage(object sender, PatchSystemEventArgs eventArgs)
37 | {
38 | _onPatchSystemEventHandler?.Invoke(sender, eventArgs);
39 | }
40 |
41 | internal void SendMessage(object sender, PatchSystem_DownloadProgressUpdateEventArgs eventArgs)
42 | {
43 | _onPatchSystemDownloadProgressUpdateEventHandler?.Invoke(sender, eventArgs);
44 | }
45 |
46 | private void C_OnPatchSystemEvent(object sender, PatchSystemEventArgs eventArgs)
47 | {
48 | switch (eventArgs.PatchSystemEventCode)
49 | {
50 | case PatchSystemEventCode.InitializeFailed:
51 | Action callback = delegate
52 | {
53 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchUserEventArgs(PatchUserEventCode.UserTryInitialize));
54 | };
55 | _sangoPatchWnd.ShowMessageBox($"Failed to initialize package !", callback);
56 | break;
57 | case PatchSystemEventCode.PatchStatesChange:
58 | string tips = eventArgs.ExtensionData[0].ToString();
59 | _sangoPatchWnd.UpdateTips(tips);
60 | break;
61 | case PatchSystemEventCode.FoundUpdateFiles:
62 | int totalCount = int.Parse(eventArgs.ExtensionData[0].ToString());
63 | long totalSizeBytes = long.Parse(eventArgs.ExtensionData[1].ToString());
64 | Action callback1 = delegate
65 | {
66 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchUserEventArgs(PatchUserEventCode.UserBeginDownloadWebFiles));
67 | };
68 | float sizeMB = totalSizeBytes / 1048576f;
69 | sizeMB = Mathf.Clamp(sizeMB, 0.1f, float.MaxValue);
70 | string totalSizeMB = sizeMB.ToString("f1");
71 | _sangoPatchWnd.ShowMessageBox($"Found update patch files, Total count {totalCount} Total szie {totalSizeMB}MB", callback1);
72 | break;
73 | case PatchSystemEventCode.PackageVersionUpdateFailed:
74 | Action callback2 = delegate
75 | {
76 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchUserEventArgs(PatchUserEventCode.UserTryUpdatePackageVersion));
77 | };
78 | _sangoPatchWnd.ShowMessageBox($"Failed to update static version, please check the network status.", callback2);
79 | break;
80 | case PatchSystemEventCode.PatchManifestUpdateFailed:
81 | Action callback3 = delegate
82 | {
83 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchUserEventArgs(PatchUserEventCode.UserTryUpdatePatchManifest));
84 | };
85 | _sangoPatchWnd.ShowMessageBox($"Failed to update patch manifest, please check the network status.", callback3);
86 | break;
87 | case PatchSystemEventCode.WebFileDownloadFailed:
88 | string fileName = eventArgs.ExtensionData[0].ToString();
89 | string Error = eventArgs.ExtensionData[1].ToString();
90 | Action callback4 = delegate
91 | {
92 | EventBus_Patchs.PatchOperation.SendMessage(this, new PatchUserEventArgs(PatchUserEventCode.UserTryDownloadWebFiles));
93 | };
94 | _sangoPatchWnd.ShowMessageBox($"Failed to download file : {fileName}", callback4);
95 | break;
96 | case PatchSystemEventCode.ClosePatchWindow:
97 | _sangoPatchWnd.gameObject.SetActive(false);
98 | break;
99 | }
100 | }
101 |
102 | private void C_OnPatchSystemDownloadProgressUpdateEvent(object sender, PatchSystem_DownloadProgressUpdateEventArgs eventArgs)
103 | {
104 | int totalDownloadCount = eventArgs.TotalDownloadCount;
105 | int currentDownloadCount = eventArgs.CurrentDownloadCount;
106 | long totalDownloadSizeBytes = eventArgs.TotalDownloadSizeBytes;
107 | long currentDownloadSizeBytes = eventArgs.CurrentDownloadSizeBytes;
108 | float sliderValue = (float)currentDownloadCount / totalDownloadCount;
109 | _sangoPatchWnd.UpdateSliderValue(sliderValue);
110 | string currentSizeMB = (currentDownloadSizeBytes / 1048576f).ToString("f1");
111 | string totalSizeMB = (totalDownloadSizeBytes / 1048576f).ToString("f1");
112 | string tips = $"{currentDownloadCount}/{totalDownloadCount} {currentSizeMB}MB/{totalSizeMB}MB";
113 | _sangoPatchWnd.UpdateTips(tips);
114 | }
115 | }
116 | }
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoPatchRoot.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 0d64334410c86344782da80d1ba2066a
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Scripts/Runtime/PublicAssets/SangoPatchWnd.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using TMPro;
3 | using UnityEngine;
4 | using UnityEngine.UI;
5 |
6 | namespace SangoUtils.Patchs_YooAsset
7 | {
8 | public class SangoPatchWnd : MonoBehaviour
9 | {
10 | private SangoPatchRoot _sangoHotFixRoot;
11 | private Transform _messageBoxTrans;
12 | private Transform _hotFixProgressPanel;
13 | private TMP_Text _tips;
14 | private TMP_Text _messageBoxContent;
15 | private Image _loadingProgressFG;
16 | private Image _loadingProgressPoint;
17 | private TMP_Text _loadingProgressText;
18 | private Action _clickMessageBoxOkCB;
19 | private Button _messageBoxOkBtn;
20 | private Button _messageBoxCancelBtn;
21 |
22 | private float _loadingProgressFGWidth;
23 | private float _loadingProgressPointYPos;
24 |
25 | internal void Initialize()
26 | {
27 | _messageBoxTrans = transform.Find("MessageBox");
28 | _hotFixProgressPanel = transform.Find("HotFixProgressPanel");
29 | _tips = _hotFixProgressPanel.Find("Tips").GetComponent();
30 |
31 | _messageBoxOkBtn = _messageBoxTrans.Find("messageBoxOkBtn").GetComponent