签到

05月06日
尚未签到

共有回帖数 0

    忘记过去

    等级:
    using UnityEngine;
    using UnityEngine.UI;
    using UnityEngine.EventSystems;
    using System.Collections;
    using System.Collections.Generic;


    public class PanelManager : MonoBehaviour {


    public Animator initiallyOpen;


    public int m_OpenParameterId;
    public Animator m_Open;
    public GameObject m_PreviouslySelected;


    const string k_OpenTransitionName = "Open";
    const string k_ClosedStateName = "Closed";


    public void OnEnable()
    {
    m_OpenParameterId = Animator.StringToHash (k_OpenTransitionName);


    if (initiallyOpen == null)
    return;


    OpenPanel(initiallyOpen);
    }


    public void OpenPanel (Animator anim)
    {
    if (m_Open == anim)
    return;


    anim.gameObject.SetActive(true);
    var newPreviouslySelected = EventSystem.current.currentSelectedGameObject;


    anim.transform.SetAsLastSibling();


    CloseCurrent();


    m_PreviouslySelected = newPreviouslySelected;


    m_Open = anim;
    m_Open.SetBool(m_OpenParameterId, true);


    GameObject go = FindFirstEnabledSelectable(anim.gameObject);


    SetSelected(go);
    }


    static GameObject FindFirstEnabledSelectable (GameObject gameObject)
    {
    GameObject go = null;
    var selectables = gameObject.GetComponentsInChildrenSelectable (true);
    foreach (var selectable in selectables) {
    if (selectable.IsActive () && selectable.IsInteractable ()) {
    go = selectable.gameObject;
    break;
    }
    }
    return go;
    }


    public void CloseCurrent()
    {
    if (m_Open == null)
    return;


    m_Open.SetBool(m_OpenParameterId, false);
    SetSelected(m_PreviouslySelected);
    StartCoroutine(DisablePanelDeleyed(m_Open));
    m_Open = null;
    }


    IEnumerator DisablePanelDeleyed(Animator anim)
    {
    bool closedStateReached = false;
    bool wantToClose = true;
    while (!closedStateReached && wantToClose)
    {
    if (!anim.IsInTransition(0))
    closedStateReached = anim.GetCurrentAnimatorStateInfo(0).IsName(k_ClosedStateName);


    wantToClose = !anim.GetBool(m_OpenParameterId);


    yield return new WaitForEndOfFrame();
    }


    if (wantToClose)
    anim.gameObject.SetActive(false);
    }


    private void SetSelected(GameObject go)
    {
    EventSystem.current.SetSelectedGameObject(go);


    var standaloneInputModule = EventSystem.current.currentInputModule as StandaloneInputModule;
    if (standaloneInputModule != null && standaloneInputModule.inputMode == StandaloneInputModule.InputMode.Buttons)
    return;


    EventSystem.current.SetSelectedGameObject(null);
    }
    }
    求大师

    楼主 2015-08-05 19:33 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知