[3D跑酷] UI事件处理系统

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

需要解决的问题

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

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

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

解决方案

GUIClickEventReceiver

解决按钮点击事件

GUIManager

管理GUI的跳转与更新

具体实现

Inspector选择事件

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

image

image

 

事件代码结构

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);
    }

相关文章

这篇文章主要介绍了Unity游戏开发中外观模式是什么意思,具有...
这篇文章主要介绍Unity中地面检测方案的示例分析,文中介绍的...
这篇文章主要介绍了Unity游戏开发中如何消除不想要的黄色警告...
这篇文章主要介绍了Unity中有多少种渲染队列,具有一定借鉴价...
这篇文章主要介绍Unity中如何实现Texture,文中介绍的非常详...
小编给大家分享一下Unity中DOTS要实现的特点有哪些,相信大部...