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. [翻译]:SQL死锁-锁与事务级别

    其实这一篇呢与解决我项目中遇到的问题也是必不可少的.上一篇讲到了各种锁之间的兼容性,里面有一项就是共享锁会引起死锁,如何避免呢,将我们的查询都设置中read uncommitted是否可行呢?其结果显 ...

  2. ajax跨子域请求的两种现代方法

    因为面向互联网的性质,我们公司的大部分系统都采用多子域的方式进行开发和部署,以达到松耦合和分布式的目的,因此子系统间的交互不可避免.虽然通过后台的rpc框架解决了大部分的交互问题,但有些情况下,前端直 ...

  3. [程序人生]前途无"亮‘’的大学

    转眼之间就到大四了,今天晚上很迷茫,很纠结,想了好多,好多,真的,长大之后,自从第一次失恋之后,第一次会想到这么的多.     嗯,先自我介绍哈吧,我是从云南的大山里走出来的孩子,什么样的大山,就是到 ...

  4. 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。

    错误的写法:  if (this.GridView1.Rows.Count > 0)         {             string style = @"<style& ...

  5. 2015第18本:从0到1,ZERO to ONE, Notes on startups, or how to build the future

    <从0到1>中文版的副标题是”开创商业与未来的秘密“,题目大得吓人,英文副标题就谨慎了许多:Notes on startups, or how to build the future. 全 ...

  6. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q115-Q117)

    Question 115You create a timer job.You need to debug the timer job.To which process should you attac ...

  7. 第一个WCF的程序

    第一个WCF的程序,按照书上的基本已经完成,就是创建配置文件那里卡住了,因为书上写的不太全,明天再进行深入调试,输入http://127.0.0.1:3721/calculatorservice/me ...

  8. 安卓开发_浅谈Service

    一.Service(服务) Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,区别在于它没有UI界面,是在后台运行的组件. public abst ...

  9. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)

    现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...

  10. iOS设计模式之命令模式

    命令模式 基本理解 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化:对请求队列或记录请求日志,以及支持客可撤离的操作. 苹果的Target-Action ...