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. django使用笔记

    django的具体使用可以看官方手册http://djangobook.py3k.cn,这里主要记录使用django中遇到的问题. 1.中文编码问题. 因为我们用到的东西基本上都有中文,在settin ...

  2. 身份证校验(c++实现)

    描述: 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码 ...

  3. javascript的错误处理

    1 onerror事件,实例代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind= ...

  4. AT NEW F、AT END OF F注意事项

    1.F只能是内表的第一个字段 2.AT NEW F.AT END OF F使用F之后内表内容会变为* 解决出现*的办法: FIELD-SYMBOLS:<ITAB> LIKE  ITAB L ...

  5. Android项目实战(三):实现第一次进入软件的引导页

    最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_Vie ...

  6. 字符串匹配--Karp-Rabin算法

    主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...

  7. iOS 正则表达式判断邮箱、身份证..是否正确

    //邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Z ...

  8. new与malloc的区别

    看起来,它们的不同只是new比malloc用起来更方便而已.仅仅是这样吗?不是吗? 1 来源不同: 1)new/delete是C++中的操作符,而malloc/free是C中的标准库函数,需要库文件支 ...

  9. 修复ORACLETNS-12545 因目标主机或对象不存在错误

    现象: ORACLE启动不了,输入cmd->lsnrctl后,出现如下错误, 经查资料,发现是主机名可能解析有问题,后来在D:\oracle\ora92\network\admin下打开list ...

  10. Asp.Net实现WebApi跨域 (非MVC)

    目前WebApi在使用上大部分都是跟MVC组合的,而且使用起来也确实十分便利. 但有时候我们也需要在WebForm中使用WebApi,二者还是有一定区别的. 首先看下结构  ①ApiControlle ...