// MonoBehaviour's interface

    void Awake()
    {
        if (m_AutomaticGenerateItems && m_Root != null)
        {
            // Cleanup Root children.

            for (int childIndex = 0; childIndex < m_Root.childCount; ++childIndex)
            {
                Transform childTransform = m_Root.GetChild(childIndex);
                Destroy(childTransform.gameObject);
            }

            // Create an Horizontal Layout Group in order to arrange items.

            HorizontalLayoutGroup horizontalLayoutGroup = m_Root.gameObject.AddComponent <HorizontalLayoutGroup>();
            horizontalLayoutGroup.childAlignment         = TextAnchor.MiddleCenter;
            horizontalLayoutGroup.spacing                = 0f;
            horizontalLayoutGroup.padding                = new RectOffset(0, 0, 0, 0);
            horizontalLayoutGroup.childForceExpandHeight = false;
            horizontalLayoutGroup.childForceExpandWidth  = true;

            // Create prefab items.

            if (m_NavbarItemPrefab != null)
            {
                m_NavbarItems = new UINavbarItem[m_MaxItems];

                for (int itemIndex = 0; itemIndex < m_NavbarItems.Length; ++itemIndex)
                {
                    UINavbarItem navbarItem = Instantiate <UINavbarItem>(m_NavbarItemPrefab);
                    navbarItem.transform.SetParent(m_Root, false);
                    navbarItem.transform.SetAsLastSibling();

                    m_NavbarItems[itemIndex] = navbarItem;
                }
            }
        }

        // Clear items.

        for (int itemIndex = 0; itemIndex < m_NavbarItems.Length; ++itemIndex)
        {
            UINavbarItem navbarItem = m_NavbarItems[itemIndex];
            if (navbarItem != null)
            {
                navbarItem.isVisible = false;
            }
        }

        // Build registration map.

        for (int index = 0; index < m_NavbarItems.Length; ++index)
        {
            m_RegisteredEntries.Add(new List <UINavbarEntry>());
        }
    }
    private void InternalRefreshNavbar()
    {
        for (int index = 0; index < m_NavbarItems.Length; ++index)
        {
            UINavbarItem navbarItem = m_NavbarItems[index];
            if (navbarItem != null)
            {
                List <UINavbarEntry> entries = m_RegisteredEntries[index];
                if (entries.Count > 0)
                {
                    // Set this item visible.

                    navbarItem.isVisible = true;

                    // Set activation state.

                    UINavbarEntry firstEntry = entries[0];

                    if (m_Dirty)
                    {
                        Sprite sprite = GetSprite(firstEntry.iconKey);

                        navbarItem.SetIcon(sprite);
                        navbarItem.SetText(firstEntry.text);
                    }

                    navbarItem.isActive = firstEntry.isActive;
                }
                else
                {
                    // Set this item hidden.

                    navbarItem.isVisible = false;
                }
            }
        }

        m_Dirty = false;
    }