[3D跑酷] GUIManager UI管理
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管理的更多相关文章
- 3D跑酷遇到的问题
前言 项目名称:3D跑酷项目 写作目地:使用Asset Server进行多人协作开发过程中,记录遇到的问题 问题1:UIAtlas无法自动更新 描述:NGUI的Atlas图集(图片)无法自动更新 后果 ...
- qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件(有上千个下一代软件黑科技项目是qt的,美国宇航局,欧洲宇航局,超级战舰DDG1000)
作者:Nebula.Trek链接:https://www.zhihu.com/question/24316868/answer/118944490来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...
- 3D跑酷游戏《月影忍者之疾风狂逃》
<月影忍者之疾风狂逃>是一款3D跑酷游戏,也是我实习的时候参与的一个项目,在那个公司我学到了很多东西,谢谢他们.大家可以去玩玩这个游戏啊,还是不错的哦.
- LayaBox进阶之UI管理器
自己动手写框架的话,UI管理器是最基础的一部分: 打开界底层是addChild打开的: 新建一个UIManager export class UIManager { private mainC ...
- Unity 游戏框架:UI 管理神器 UI Kit
UI Kit 快速入门 首先我们来进行 UI Kit 的快速入门 制作一个界面的,步骤如下: 准备 生成代码 逻辑编写 运行 1. 准备 先创建一个场景 TestUIHomePanel. 删除 Hie ...
- 游戏开发之UI管理器(跨引擎)
使用UI管理器的目的 使用单场景与zindex结合的方式管理UI. 能够隐藏底层UI达到优化效果. 很好的组织和管理UI. 跨引擎使用. 管理器分类 根据以往经验我开发了三种类型的管理器,队列管理器, ...
- 【ELK】Centos7 安装 ELK 7.6.2 和 UI 管理界面以及测试例子
1. 初始化环境 1.0 初始化环境官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config ...
- [3D跑酷] UI事件处理系统
在我们的Unity游戏项目中,GUI的表现采用NGUI.记录一下我们的处理方式: 需要解决的问题 1.需要处理大量按钮的点击事件 2.需要处理界面跳转事件 3.需要处理界面元素更新事件 解决方案 GU ...
- [3D跑酷] MissionManager
前言 许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager 引用关系 首先看下MissionMa ...
随机推荐
- TSQL生成Combguid
Nhibernate实现combguid /// <summary> /// Generate a new <see cref="Guid"/> using ...
- 关于iChartjs在移动端提示框tip显示不正常的解决方法
最近项目需要使用手机图表,但是找了很久都没找到专门为移动端开发的图表,只能找一些能兼容移动端的图表控件,今天就讲讲关于iChartjs这个图形库的一点问题. 问题 iChartjs的提示框tip的显示 ...
- Vue方法与事件
gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson10 一 vue方法实现 <!DOCTYPE html> ...
- JavaScript强化教程——Cocos2d-JS中JavaScript继承
javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...
- 使用NPOI将多张图片导入execl
protected void btn_Export_Click(object sender, EventArgs e) { List<BNXX_SJXJ_XJSJ> list = View ...
- 【原】训练自己haar-like特征分类器并识别物体(1)
本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本 ...
- CocoaPods的使用
一.安装Cocoapods步骤:(在终端安装) 1.在安装前,需确保已经安装了Ruby环境 mac 下安装Ruby环境步骤: (1).安装RVM $ curl -L https://get.rvm.i ...
- UITableVIew 滚动流畅性优化
影响UITableViewUITableView滚动的流畅性原因: 1. 在代理方法中做了过多的计算占用了 UI 线程的时间 2.同上 3.Cell 中 view 的组织复杂,比如使用layer并不会 ...
- Swift学习--常量.变量.数据类型的使用(二)
一.Swift中的数组 //Swift中的数组 //NSArray *arr = @["",""]; //和OC数组的区别就是去掉前面的@ let arr11 ...
- 开始玩mondrian
官网:http://community.pentaho.com/projects/mondrian/ 官方编译的包:https://sourceforge.net/projects/mondrian/ ...