zoukankan      html  css  js  c++  java
  • [3D跑酷] GUIManager UI管理

    UI元素更新及界面跳转

    继上篇日志《Unity开发之 GUIClickEventReceiver》,再谈一下我们如何管理游戏中的UI元素更新及界面跳转

    UI绑定

    image

    图一:Inspector面板 Public GameObjectName与GameObject一一对应

    UI结构及命名规范

    image

    图二:Hierarchy面板 UI父子结构及组件命名规范

    UI枚举种类

    image

    图三:enum GUIState

    UI绑定代码

    image

    图四:public UI控件定义 与Hierarchy命名规范

    UI主要方法及逻辑

    image

    图五:主要方法及逻辑

    主要方法

    1、隐藏Transform及子Transform

    #if !UNITY_3_5
        private void activeRecursively(Transform obj, bool active)
        {
            foreach (Transform child in obj) {
                activeRecursively(child, active);
            }
            obj.gameObject.SetActive(active);
        }
       #endif
    private GameObject panelFromState(GUIState state)
        {
            switch (state) {
            case GUIState.MainMenu:
                return mainMenuPanel;
            case GUIState.InGame:
                return inGamePanel;
            case GUIState.EndGame:
                return endGamePanel;
            case GUIState.Store:
                return storePanel;
            case GUIState.Stats:
                return statsPanel;
            case GUIState.Pause:
                return pausePanel;
            case GUIState.Tutorial:
                return tutorialPanel;
            case GUIState.Missions:
                return missionsPanel;
            }
            return null; // how'd we get here?
        }
    private void changeGUIState(bool activate, GUIState state)
        {
            GameObject activePanel = panelFromState(state);
    
            if (activePanel != null) {
               #if UNITY_3_5
                    activePanel.SetActiveRecursively(activate);
               #else
                    activeRecursively(activePanel.transform, activate);
               #endif
            }
        }
    public void showGUI(GUIState state)
        {
            // activate the new gui state, deactivate the old.
            changeGUIState(true, state);
            changeGUIState(false, guiState);
            
            switch (state) {
             case GUIState.EndGame:
                endGameScore.text = dataManager.getScore().ToString();
                endGameCoins.text = dataManager.getLevelCoins().ToString();
                endGameMultiplier.text = string.Format("{0}x", missionManager.getScoreMultiplier());
                break;
                
             case GUIState.Store:
                refreshStoreGUI();
                
                // go back to the correct menu that we came from
                if (guiState == GUIState.MainMenu) {
                    storeBackButtonReceiver.clickType = ClickType.MainMenu;
                } else { // coming from GUIState.EndGame
                    storeBackButtonReceiver.clickType = ClickType.EndGame;
                }
                break;
              //......
            }
          }
    public void refreshStoreGUI()
        {
            storeTotalCoins.text = dataManager.getTotalCoins().ToString();
            
            int cost = dataManager.getPowerUpCost(PowerUpTypes.DoubleCoin);
            if (cost != -1) {
                storeCoinDoublerCost.text = string.Format("{0} Coins", cost);    
            } else {
    #if UNITY_3_5
                storeCoinDoublerGroup.gameObject.SetActiveRecursively(false);
    #else
                storeCoinDoublerGroup.SetActive(false);
    #endif
            }
                
            cost = dataManager.getPowerUpCost(PowerUpTypes.CoinMagnet);
            if (cost != -1) {
                storeCoinMagnetCost.text = string.Format("{0} Coins", cost);    
            } else {
    #if UNITY_3_5
                storeCoinMagnetGroup.SetActiveRecursively(false);
    #else
                storeCoinMagnetGroup.SetActive(false);
    #endif
            }
                
            cost = dataManager.getPowerUpCost(PowerUpTypes.Invincibility);
            if (cost != -1) {
                storeInvincibilityCost.text = string.Format("{0} Coins", cost);    
            } else {
    #if UNITY_3_5
                storeInvincibilityGroup.SetActiveRecursively(false);
    #else
                storeInvincibilityGroup.SetActive(false);
    #endif
            }
        }
  • 相关阅读:
    hdu2191(多重背包)
    hdu3664(递推dp)
    hdu2955(变形01背包)
    hdu1712(分组背包)
    hdu1114(完全背包)
    hdu4004(二分)
    hdu2870(dp求最大子矩阵)
    POJ 1979 Red and Black(水题,递归)
    POJ 1922 Ride to School(贪心+模拟)
    POJ 1182 食物链(种类并查集)
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3398876.html
Copyright © 2011-2022 走看看