/// <summary> /// 开启窗口(同步) /// </summary> /// <typeparam name="TView">窗口类型</typeparam> /// <returns>窗口对象</returns> public TView SyncOpenView <TView>() where TView : BaseView, new() { try { var viewName = typeof(TView).Name; var view = _cache.FirstAllFromKey(p => p.GetType() == typeof(TView)); if (view.Item1 == null) { var initView = InitView <TView>(); view = new Tuple <BaseView, Transform>(initView.Item1, initView.Item2); _cache.Set(view.Item1, view.Item2); Dispatcher.DoWork($"OnInitView_{viewName}"); //执行初始化 Dispatcher.DoWork($"AddDelegates_{viewName}"); //执行监听任务 } else { view.Item2.gameObject.SetActive(true); } Dispatcher.DoWork($"SyncOpenView_{viewName}"); //执行窗口开启 return(view.Item1 as TView); } catch (Exception e) { Debug.LogError($"同步开启窗口{typeof(TView)}失败,原因:{e}"); } return(null); }
/// <summary> /// 添加组件 /// </summary> /// <typeparam name="TComponent">组件类型</typeparam> /// <param name="target">目标对象</param> /// <param name="tag">组件标识</param> /// <returns>添加的或者已存在的对象</returns> public static TComponent CreateComponent <TComponent>(string tag = null) where TComponent : BaseComponent, new() { var component = new TComponent() { Tag = tag }; _cache.Set(component.Id, component); return(component); }