@@ -67,7 +67,7 @@ public event EventHandler<OpenUIFormDependencyAssetEventArgs> OpenUIFormDependen
67
67
add { m_OpenUIFormDependencyAssetEventHandler += value; }
68
68
remove { m_OpenUIFormDependencyAssetEventHandler -= value; }
69
69
}*/
70
-
70
+
71
71
/// <summary>
72
72
/// 打开界面。
73
73
/// </summary>
@@ -96,76 +96,74 @@ private async Task<IUIForm> InnerOpenUIFormAsync(string uiFormAssetPath, Type ui
96
96
int serialId = ++ m_Serial ;
97
97
var uiFormAssetName = uiFormType . Name ;
98
98
UIFormInstanceObject uiFormInstanceObject = m_InstancePool . Spawn ( uiFormAssetName ) ;
99
- if ( uiFormInstanceObject = = null )
99
+ if ( uiFormInstanceObject ! = null )
100
100
{
101
- m_UIFormsBeingLoaded . Add ( serialId , uiFormAssetName ) ;
102
- string assetPath = PathHelper . Combine ( uiFormAssetPath , uiFormAssetName ) ;
101
+ // 如果对象池存在
102
+ return InternalOpenUIForm ( serialId , uiFormAssetName , uiFormType , uiFormInstanceObject . Target , pauseCoveredUIForm , false , 0f , userData , isFullScreen ) ;
103
+ }
103
104
104
- var lastIndexOfStart = uiFormAssetPath . LastIndexOf ( "/" , StringComparison . OrdinalIgnoreCase ) ;
105
- var packageName = uiFormAssetPath . Substring ( lastIndexOfStart + 1 ) ;
106
- var has = FairyGuiPackage . Has ( packageName ) ;
105
+ m_UIFormsBeingLoaded . Add ( serialId , uiFormAssetName ) ;
106
+ string assetPath = PathHelper . Combine ( uiFormAssetPath , uiFormAssetName ) ;
107
107
108
- OpenUIFormInfoData openUIFormInfoData = OpenUIFormInfoData . Create ( serialId , packageName , uiFormAssetName , uiFormType , pauseCoveredUIForm , userData ) ;
108
+ var lastIndexOfStart = uiFormAssetPath . LastIndexOf ( "/" , StringComparison . OrdinalIgnoreCase ) ;
109
+ var packageName = uiFormAssetPath . Substring ( lastIndexOfStart + 1 ) ;
110
+ // 检查UI包是否已经加载过
111
+ var hasUIPackage = FairyGuiPackage . Has ( packageName ) ;
109
112
110
- OpenUIFormInfo openUIFormInfo = OpenUIFormInfo . Create ( serialId , uiFormType , pauseCoveredUIForm , userData , isFullScreen ) ;
111
- if ( assetPath . IndexOf ( Utility . Asset . Path . BundlesDirectoryName , StringComparison . OrdinalIgnoreCase ) >= 0 )
113
+ OpenUIFormInfoData openUIFormInfoData = OpenUIFormInfoData . Create ( serialId , packageName , uiFormAssetName , uiFormType , pauseCoveredUIForm , userData ) ;
114
+ OpenUIFormInfo openUIFormInfo = OpenUIFormInfo . Create ( serialId , uiFormType , pauseCoveredUIForm , userData , isFullScreen ) ;
115
+ if ( assetPath . IndexOf ( Utility . Asset . Path . BundlesDirectoryName , StringComparison . OrdinalIgnoreCase ) < 0 )
116
+ {
117
+ // 从Resources 中加载
118
+ if ( ! hasUIPackage )
112
119
{
113
- if ( ! has )
114
- {
115
- if ( packageName == uiFormAssetName )
116
- {
117
- await FairyGuiPackage . AddPackageAsync ( assetPath ) ;
118
- }
119
- else
120
- {
121
- string newPackagePath = PathHelper . Combine ( uiFormAssetPath , packageName ) ;
122
- await FairyGuiPackage . AddPackageAsync ( newPackagePath ) ;
123
- }
124
-
125
- string newAssetPackagePath = assetPath ;
126
- if ( packageName != uiFormAssetName )
127
- {
128
- newAssetPackagePath = PathHelper . Combine ( uiFormAssetPath , packageName ) ;
129
- }
130
-
131
- newAssetPackagePath += "_fui" ;
132
- // 从包中加载
133
- var assetHandle = await m_AssetManager . LoadAssetAsync < UnityEngine . Object > ( newAssetPackagePath ) ;
134
-
135
- if ( assetHandle . IsSucceed )
136
- {
137
- return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , assetHandle . Progress , openUIFormInfo ) ;
138
- }
139
- else
140
- {
141
- return LoadAssetFailureCallback ( uiFormAssetName , assetHandle . LastError , openUIFormInfo ) ;
142
- }
143
- }
144
- else
145
- {
146
- return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , 1 , openUIFormInfo ) ;
147
- }
120
+ FairyGuiPackage . AddPackageSync ( assetPath ) ;
148
121
}
149
- else
150
- {
151
- if ( ! has )
152
- {
153
- FairyGuiPackage . AddPackageSync ( assetPath ) ;
154
- }
155
122
156
- // 从Resources 中加载
157
- return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , 0 , openUIFormInfo ) ;
158
- }
123
+ return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , 0 , openUIFormInfo ) ;
124
+ }
125
+
126
+ // 检查UI包是否已经加载过
127
+ if ( hasUIPackage )
128
+ {
129
+ // 如果UI 包存在则创建界面
130
+ return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , 1 , openUIFormInfo ) ;
131
+ }
132
+
133
+ if ( packageName == uiFormAssetName )
134
+ {
135
+ // 如果UI资源名字和包名一致则直接加载
136
+ await FairyGuiPackage . AddPackageAsync ( assetPath ) ;
159
137
}
160
138
else
161
139
{
162
- return InternalOpenUIForm ( serialId , uiFormAssetName , uiFormType , uiFormInstanceObject . Target , pauseCoveredUIForm , false , 0f , userData , isFullScreen ) ;
140
+ // 不一致则重新拼接路径
141
+ string newPackagePath = PathHelper . Combine ( uiFormAssetPath , packageName ) ;
142
+ await FairyGuiPackage . AddPackageAsync ( newPackagePath ) ;
163
143
}
144
+
145
+ string newAssetPackagePath = assetPath ;
146
+ if ( packageName != uiFormAssetName )
147
+ {
148
+ newAssetPackagePath = PathHelper . Combine ( uiFormAssetPath , packageName ) ;
149
+ }
150
+
151
+ newAssetPackagePath += "_fui" ;
152
+ // 从包中加载
153
+ var assetHandle = await m_AssetManager . LoadAssetAsync < UnityEngine . Object > ( newAssetPackagePath ) ;
154
+
155
+ if ( assetHandle . IsSucceed )
156
+ {
157
+ // 加载成功
158
+ return LoadAssetSuccessCallback ( uiFormAssetName , openUIFormInfoData , assetHandle . Progress , openUIFormInfo ) ;
159
+ }
160
+
161
+ // UI包不存在
162
+ return LoadAssetFailureCallback ( uiFormAssetName , assetHandle . LastError , openUIFormInfo ) ;
164
163
}
165
164
166
165
private IUIForm InternalOpenUIForm ( int serialId , string uiFormAssetName , Type uiFormType , object uiFormInstance , bool pauseCoveredUIForm , bool isNewInstance , float duration , object userData , bool isFullScreen )
167
166
{
168
- IUIGroup uiGroup = null ;
169
167
try
170
168
{
171
169
IUIForm uiForm = m_UIFormHelper . CreateUIForm ( uiFormInstance , uiFormType , userData ) ;
@@ -174,8 +172,8 @@ private IUIForm InternalOpenUIForm(int serialId, string uiFormAssetName, Type ui
174
172
throw new GameFrameworkException ( "Can not create UI form in UI form helper." ) ;
175
173
}
176
174
177
- uiGroup = uiForm . UIGroup ;
178
- uiForm . Init ( serialId , uiFormAssetName , uiForm . UIGroup , OnInitAction , pauseCoveredUIForm , isNewInstance , userData , isFullScreen ) ;
175
+ var uiGroup = uiForm . UIGroup ;
176
+ uiForm . Init ( serialId , uiFormAssetName , uiGroup , OnInitAction , pauseCoveredUIForm , isNewInstance , userData , isFullScreen ) ;
179
177
180
178
void OnInitAction ( IUIForm obj )
181
179
{
0 commit comments