using FairyGUI; namespace Game { public class UIPoolItem : ObjectPoolItemBase { } public class UIPoolItem : UIPoolItem where T : GComponent, new() { public T Component; protected override void OnCreate() { Component.visible = true; } protected override void OnDestroy() { Component.visible = false; } } public class UIPoolManager : ObjectPoolBase { public override void OnCreate() { } public UIPoolItem CreateUIItem(string url) where T : GComponent, new() { var contentItem = UIPackage.GetItemByURL(url); var pkgName = contentItem.owner.name; var compName = contentItem.name; var typeName = $"{contentItem.owner.name}_{contentItem.name}"; var poolObj = Create>(typeName, (item) => { item.Component = CreateUIComponent(pkgName, compName) as T; }); return poolObj; } private GComponent CreateUIComponent(string pkgName, string compName) { var comp = UIPackage.CreateObject(pkgName, compName).asCom; GRoot.inst.AddChild(comp); return comp; } } }