UI元素更新及界面跳转

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

UI绑定

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

UI结构及命名规范

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

UI枚举种类

图三:enum GUIState

UI绑定代码

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

UI主要方法及逻辑

图五:主要方法及逻辑

主要方法

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




[3D跑酷] GUIManager UI管理的更多相关文章

  1. 3D跑酷遇到的问题

    前言 项目名称:3D跑酷项目 写作目地:使用Asset Server进行多人协作开发过程中,记录遇到的问题 问题1:UIAtlas无法自动更新 描述:NGUI的Atlas图集(图片)无法自动更新 后果 ...

  2. qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件(有上千个下一代软件黑科技项目是qt的,美国宇航局,欧洲宇航局,超级战舰DDG1000)

    作者:Nebula.Trek链接:https://www.zhihu.com/question/24316868/answer/118944490来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  3. 3D跑酷游戏《月影忍者之疾风狂逃》

    <月影忍者之疾风狂逃>是一款3D跑酷游戏,也是我实习的时候参与的一个项目,在那个公司我学到了很多东西,谢谢他们.大家可以去玩玩这个游戏啊,还是不错的哦.

  4. LayaBox进阶之UI管理器

    自己动手写框架的话,UI管理器是最基础的一部分: 打开界底层是addChild打开的:     新建一个UIManager export class UIManager { private mainC ...

  5. Unity 游戏框架:UI 管理神器 UI Kit

    UI Kit 快速入门 首先我们来进行 UI Kit 的快速入门 制作一个界面的,步骤如下: 准备 生成代码 逻辑编写 运行 1. 准备 先创建一个场景 TestUIHomePanel. 删除 Hie ...

  6. 游戏开发之UI管理器(跨引擎)

    使用UI管理器的目的 使用单场景与zindex结合的方式管理UI. 能够隐藏底层UI达到优化效果. 很好的组织和管理UI. 跨引擎使用. 管理器分类 根据以往经验我开发了三种类型的管理器,队列管理器, ...

  7. 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子

    1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...

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

    在我们的Unity游戏项目中,GUI的表现采用NGUI.记录一下我们的处理方式: 需要解决的问题 1.需要处理大量按钮的点击事件 2.需要处理界面跳转事件 3.需要处理界面元素更新事件 解决方案 GU ...

  9. [3D跑酷] MissionManager

    前言 许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager 引用关系 首先看下MissionMa ...

随机推荐

  1. TSQL生成Combguid

    Nhibernate实现combguid /// <summary> /// Generate a new <see cref="Guid"/> using ...

  2. 关于iChartjs在移动端提示框tip显示不正常的解决方法

    最近项目需要使用手机图表,但是找了很久都没找到专门为移动端开发的图表,只能找一些能兼容移动端的图表控件,今天就讲讲关于iChartjs这个图形库的一点问题. 问题 iChartjs的提示框tip的显示 ...

  3. Vue方法与事件

    gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson10 一 vue方法实现 <!DOCTYPE html> ...

  4. JavaScript强化教程——Cocos2d-JS中JavaScript继承

    javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  5. 使用NPOI将多张图片导入execl

    protected void btn_Export_Click(object sender, EventArgs e) { List<BNXX_SJXJ_XJSJ> list = View ...

  6. 【原】训练自己haar-like特征分类器并识别物体(1)

    本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本 ...

  7. CocoaPods的使用

    一.安装Cocoapods步骤:(在终端安装) 1.在安装前,需确保已经安装了Ruby环境 mac 下安装Ruby环境步骤: (1).安装RVM $ curl -L https://get.rvm.i ...

  8. UITableVIew 滚动流畅性优化

    影响UITableViewUITableView滚动的流畅性原因: 1. 在代理方法中做了过多的计算占用了 UI 线程的时间 2.同上 3.Cell 中 view 的组织复杂,比如使用layer并不会 ...

  9. Swift学习--常量.变量.数据类型的使用(二)

    一.Swift中的数组 //Swift中的数组 //NSArray *arr = @["",""]; //和OC数组的区别就是去掉前面的@ let arr11 ...

  10. 开始玩mondrian

    官网:http://community.pentaho.com/projects/mondrian/ 官方编译的包:https://sourceforge.net/projects/mondrian/ ...