@@ -219,6 +219,30 @@ private static string GenerateCode(GameObject selectedObject, string assetPath)
219219 PropertyHandler ( selectedObject , null , nodeInfos , true ) ;
220220 PropertyCodeHandler ( codeBuilder , nodeInfos ) ;
221221
222+ // 生成工厂方法
223+ codeBuilder . AppendLine ( $ "\t \t public static { className } Create(GameObject go)") ;
224+ codeBuilder . AppendLine ( "\t \t {" ) ;
225+ codeBuilder . AppendLine ( "\t \t \t var ui = go.GetOrAddComponent<" + className + ">();" ) ;
226+ codeBuilder . AppendLine ( "\t \t \t ui?.InitView();" ) ;
227+ codeBuilder . AppendLine ( "\t \t \t return ui;" ) ;
228+ codeBuilder . AppendLine ( "\t \t }" ) ;
229+ codeBuilder . AppendLine ( ) ;
230+ codeBuilder . AppendLine ( "\t \t /// <summary>" ) ;
231+ codeBuilder . AppendLine ( "\t \t /// 通过此方法获取的UGUI,在Dispose时不会释放GameObject,需要自行管理(一般在配合对象池机制时使用)。" ) ;
232+ codeBuilder . AppendLine ( "\t \t /// </summary>" ) ;
233+ codeBuilder . AppendLine ( $ "\t \t public static { className } GetFromPool(GameObject go)") ;
234+ codeBuilder . AppendLine ( "\t \t {" ) ;
235+ codeBuilder . AppendLine ( "\t \t \t var ui = go.GetComponent<" + className + ">();" ) ;
236+ codeBuilder . AppendLine ( "\t \t \t if (ui == null)" ) ;
237+ codeBuilder . AppendLine ( "\t \t \t {" ) ;
238+ codeBuilder . AppendLine ( "\t \t \t \t ui = Create(go);" ) ;
239+ codeBuilder . AppendLine ( "\t \t \t }" ) ;
240+ codeBuilder . AppendLine ( ) ;
241+ codeBuilder . AppendLine ( "\t \t \t ui.IsFromPool = true;" ) ;
242+ codeBuilder . AppendLine ( "\t \t \t return ui;" ) ;
243+ codeBuilder . AppendLine ( "\t \t }" ) ;
244+ codeBuilder . AppendLine ( ) ;
245+
222246 // 生成初始化方法
223247 codeBuilder . AppendLine ( "\t \t private bool _isInitView = false;" ) ;
224248 codeBuilder . AppendLine ( ) ;
@@ -269,7 +293,7 @@ private static void PropertyCodeHandler(StringBuilder codeBuilder, List<NodeInfo
269293 foreach ( var nodeInfo in nodeInfos )
270294 {
271295 string path = PathHandler ( nodeInfo ) ;
272- codeBuilder . AppendLine ( $ "\t \t [SerializeField] [ UGUIElementProperty(\" { path } \" )]") ;
296+ codeBuilder . AppendLine ( $ "\t \t [UGUIElementProperty(\" { path } \" )]") ;
273297 codeBuilder . AppendLine ( $ "\t \t private { nodeInfo . Type } { nodeInfo . Name } ;") ;
274298 codeBuilder . AppendLine ( ) ;
275299
0 commit comments