zoukankan      html  css  js  c++  java
  • [3D跑酷] UI事件处理系统

    在我们的Unity游戏项目中,GUI的表现采用NGUI。记录一下我们的处理方式:

    需要解决的问题

    1、需要处理大量按钮的点击事件

    2、需要处理界面跳转事件

    3、需要处理界面元素更新事件

    解决方案

    GUIClickEventReceiver

    解决按钮点击事件

    GUIManager

    管理GUI的跳转与更新

    具体实现

    Inspector选择事件

    在编辑器中为按钮选择点击事件

    imageimage

    事件代码结构

    image

    主要逻辑

    public void OnClick ()
        {
            bool playSoundEffect = true;
            switch (clickType) {
            case ClickType.StartGame:
                GameManager.instance.startGame ();
                break;
            case ClickType.Store:
                GUIManager.instance.showGUI (GUIState.Store);
                break;
            case ClickType.Stats:
                GUIManager.instance.showGUI (GUIState.Stats);
                break;
            case ClickType.DoubleCoinUpgrade:
                GameManager.instance.upgradePowerUp (PowerUpTypes.DoubleCoin);
                break;
            case ClickType.CoinMagnetUpgrade:
                GameManager.instance.upgradePowerUp (PowerUpTypes.CoinMagnet);
                break;
            case ClickType.InvincibilityUpgrade:
                GameManager.instance.upgradePowerUp (PowerUpTypes.Invincibility);
                break;
            case ClickType.AddSpeedUpgrade:
                GameManager.instance.upgradePowerUp (PowerUpTypes.AddSpeed);
                break;
            case ClickType.ProtectionCoverUpgrade:
                GameManager.instance.upgradePowerUp(PowerUpTypes.ProtectionCover);
                break;
            case ClickType.AttackGunUpgrade:
                GameManager.instance.upgradePowerUp(PowerUpTypes.AttackGun);
                break;
            case ClickType.EndGame:
                GUIManager.instance.showGUI (GUIState.EndGame);
                break;
            case ClickType.Restart:
                GameManager.instance.restartGame (true);
                break;
            case ClickType.MainMenu:
                GameManager.instance.backToMainMenu (false);
                break;
            case ClickType.MainMenuRestart:
                GameManager.instance.backToMainMenu (true);
                break;
            case ClickType.Pause:
                GameManager.instance.pauseGame (true);
                playSoundEffect = false;
                break;
            case ClickType.Resume:
                GameManager.instance.pauseGame (false);
                break;
            case ClickType.ToggleTutorial:
                GameManager.instance.toggleTutorial ();
                break;
            case ClickType.Missions:
                GUIManager.instance.showGUI (GUIState.Missions);
                break;
            }
    
            if (playSoundEffect)
                AudioManager.instance.playSoundEffect (SoundEffects.GUITapSoundEffect);
        }
  • 相关阅读:
    【Java基础】List迭代并修改时出现的ConcurrentModificationException问题
    【Java基础】Integer包装类的缓冲池问题
    【Java基础】基本类型的包装类作为参数传递是值传递还是引用传递
    【Java基础】关于String的总结
    Mac IDEA快捷键积累
    POJ1273 Drainage Ditches
    BZOJ2763 飞行路线
    NOIP2018 货币系统
    BZOJ2748 音量调节
    BZOJ1721 Ski Lift 缆车支柱
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/3398791.html
Copyright © 2011-2022 走看看