using FairyGUI; namespace Game { public class UIPoolItem : ObjectPoolItemBase { } public class UIPoolItem : UIPoolItem where T : GComponent, new() { public T MComponent; protected override void OnCreate() { MComponent.visible = true; } protected override void OnDestroy() { MComponent.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; string typeName = $"{contentItem.owner.name}_{contentItem.name}"; var poolObj = Create>(typeName, (item) => { item.MComponent = 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; } } }