Ejemplo n.º 1
0
    /// <summary>
    /// 创建并获取一个面板实例
    /// 可选参数:面板类型的委托(事件,当面板被打开的时候)(有了同步版本后暂时不用)
    /// </summary>
    /// <param name="info"></param>
    /// <returns></returns>
    public static WaitOpenPanel <TPanel> OpenPanelByCoroutine <TPanel>(System.Action <TPanel> onPanelOpened = null) where TPanel : BasePanel, new()
    {
        GameObject parent = GameObject.Find("Canvas");

        if (!parent)
        {
            Debug.LogError("淦!你是不是没在场景中放canvas!?");
            return(null);
        }

        //panel并不作为component,只是需要一个地方存放 脚本类实例,用new不用AddComponent
        var panel = new TPanel();

        ////改成用协程方式加载
        var loadPrefabHandle = new WaitLoadAsset <GameObject>(panel.Path);



        System.Action <GameObject> openPanelAction = prefab =>
        {
            GameObject panelGobj = Object.Instantiate(prefab, parent.transform);
            //加载完面板后初始化面板脚本中的字段
            //因为 类型名就是面板名,所以可以typeof(TPanel).Name
            panelGobj.name = typeof(TPanel).Name;
            panel.Init(panelGobj.name, panelGobj);
            panel.OnOpen();
        };

        return(new WaitOpenPanel <TPanel>(loadPrefabHandle, openPanelAction, onPanelOpened));
    }
Ejemplo n.º 2
0
 /// <summary>
 /// 等待面板打开(构造函数)
 /// 所需参数:
 /// 1 需要一个加载面板的协程  2 无返回值openPanel委托 3 ???
 /// </summary>
 /// <param name="loadPanelPrefabCoroutine"></param>
 /// <param name="openPanelAction"></param>
 /// <param name="onOpended"></param>
 public WaitOpenPanel(WaitLoadAsset <GameObject> loadPanelPrefabCoroutine, Action <GameObject> openPanelAction, Action <Tpanel> onOpended)
 {
     OnOpened += onOpended;
     loadPanelPrefabCoroutine.OnFinish += _ =>
     {
         openPanelAction?.Invoke(loadPanelPrefabCoroutine.m_asset);
         m_panel     = new Tpanel();
         IsCompleted = true;
         OnOpened?.Invoke(m_panel);
         OnFinish?.Invoke(m_panel);
     };
 }