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. tomcat filewatchdog but has failed to stop it原因以及解决方法

    停止tomcat,有些时候会报The web application [/XXX] appears to have started a thread named [FileWatchdog] but ...

  2. javascript函数中的三个技巧【三】

    技巧三: [函数绑定] 在javascript与DOM交互中经常需要使用函数绑定,定义一个函数然后将其绑定到特定DOM元素或集合的某个事件触发程序上,绑定函数经常和回调函数及事件处理程序一起使用,以便 ...

  3. IOS6学习笔记(四)

    1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...

  4. Android Activity/Service/Broadcaster三大组件之间互相调用

    我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity ...

  5. Android 5中不同效果的Toast

    一.运行的结果 二.主要的代码 package com.otn.android.toast; import java.util.Timer; import java.util.TimerTask; i ...

  6. Android DiskLruCache 硬盘缓存

    概述 记得在很早之前,我有写过一篇文章Android高效加载大图.多图解决方案,有效避免程序OOM,这篇文章是翻译自Android Doc的,其中防止多图OOM的核心解决思路就是使用LruCache技 ...

  7. C标准库<assert.h>实现

    本文地址:http://www.cnblogs.com/archimedes/p/c-library-assert.html,转载请注明源地址. 1.背景知识 头文件<assert.h>唯 ...

  8. iOS设计模式之中介者模式

    中介者模式 基本理解 中介者模式又叫做调停者模式,其实就是中间人或者调停者的意思. 尽管将一个系统分割成许多对象通常可以增加可复用性,但是对象之间的连接又降低了可复用性. 如果两个类不必彼此直接通信, ...

  9. iOS实现(超级猜图)源码

    //首先建立模型文件 QLLQuestion.hheQLLQuestion.m文件 #import <Foundation/Foundation.h> @interface QLLQues ...

  10. CoreAnimation-09-模拟时钟

    效果图 实现思路 该示例通过隐式动画实现 表盘通过显示在imageView中的一张图片来实现 在表盘上绘制(时分秒)三条直线,分别位于不同的图层,且时针位于最下层,秒针位于最上层 设置直线为圆角 直线 ...