前言

许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager

引用关系

首先看下MissionManager在项目中的引用关系

解释一下引用关系:

MissionManager是一个单例类,类中定义了和任务相关的属性的方法,其它类中通过单例引用MissionManager中的方法

GameManager

public void gameOver (GameOverType gameOverType, bool waitForFrame)
{
missionManager.gameOver ();
}
再来查看MissionManager中的GameOver()
    public void gameOver()
{
checkForCompletedMissions();
}

这里的逻辑是,在GameOver的时候检查MissionManager中的任务是否完成

DataManager

public int getScore ()
{
return Mathf.RoundToInt (score * missionManager.getScoreMultiplier ());
}

DataManager中 获取玩家得分  MissionManager中的倍率*Score=玩家最后的得分

 

GUIManager

    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 ()+"M";
endGameCoins.text = dataManager.getLevelCoins ().ToString ();
endGameHighScore.text=dataManager.getHighScore().ToString()+"M";
endGameMultiplier.text = string.Format ("{0}x", missionManager.getScoreMultiplier ());
break;
case GUIState.Missions:
if (guiState == GUIState.MainMenu) {
missionsBackButtonReceiver.clickType = ClickType.MainMenu;
} else { // coming from GUIState.EndGame
missionsBackButtonReceiver.clickType = ClickType.EndGame;
}
missionsScoreMultiplier.text = string.Format ("{0}x", missionManager.getScoreMultiplier ());
missionsActiveMission1.text = dataManager.getMissionDescription (missionManager.getMission (0));
missionsActiveMission2.text = dataManager.getMissionDescription (missionManager.getMission (1));
missionsActiveMission3.text = dataManager.getMissionDescription (missionManager.getMission (2)); break;
}

可以看到在GUIManager中,当UI切换到任务界面时,显示在界面上的数据大多与MissionManager中的属性或方法相关

任务系统 (MissionManager)

MissionManager的属性和方法

    public void Start()
{
dataManager = DataManager.instance; activeMissions = new MissionType[3]; // 3 active missions at a time
scoreMultiplier = 1;
for (int i = 0; i < activeMissions.Length; ++i) {
activeMissions[i] = (MissionType)PlayerPrefs.GetInt(string.Format("Mission{0}", i), -1);
// there are no active missions if the game hasn't been started yet
if ((int)activeMissions[i] == -1) {
activeMissions[i] = (MissionType)(i * 4); // 4 missions per set
}
scoreMultiplier += ((int)activeMissions[i] % 4) * scoreMultiplierIncrement;
}
}
//检测任务是否完成
private void checkForCompletedMissions()
{
for (int i = 0; i < activeMissions.Length; ++i) {
switch (activeMissions[i]) {
case MissionType.NoviceRunner:
if (dataManager.getScore() > 500) {
missionComplete(MissionType.NoviceRunner);
}
break;
......
}
}
}
//任务完成
private void missionComplete(MissionType missionType)
{
int missionSet = (int)missionType / 4;
activeMissions[missionSet] = missionType + 1;
scoreMultiplier += scoreMultiplierIncrement;
PlayerPrefs.SetInt(string.Format("Mission{0}", missionSet), (int)activeMissions[missionSet]);
}

设计思想

[3D跑酷] MissionManager的更多相关文章

  1. 3D跑酷遇到的问题

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

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

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

  3. [3D跑酷] GUIManager UI管理

    UI元素更新及界面跳转 继上篇日志<Unity开发之 GUIClickEventReceiver>,再谈一下我们如何管理游戏中的UI元素更新及界面跳转 UI绑定 图一:Inspector面 ...

  4. [3d跑酷] Xcode5 打包 发布配置

    主题 Unity导出Xcode项目,使用Xocde打包ipa并提交到AppStore xcode发布配置 1.设置发布相关参数,比如 包名,版本,证书,ios设备版本 2.设置体系结构,支持的平台(I ...

  5. [3D跑酷] DataManager

    DataManager管理游戏中数据,当然这个类中大部分的属性和方法都是Public 函数列表

  6. [3D跑酷] GameManager

    GameManager在游戏中很重要,处理整个游戏的流程,但是在这个类中尽量也只是写一些重要的方法,调用其它类中的方法. 枚举项 函数列表 方法解释 //当玩家碰到障碍(障碍Type,碰撞Positi ...

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

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

  8. [3D跑酷] AudioManager

    Unity音频管理 游戏中的声音管理最常用的组件莫过于AudioSource和AudioClip,我的做法是建立是一个AudioManager类(单例类)管理各个音频,谈一下我的经验: 函数列表 St ...

  9. Unity3D 3D横版跑酷

    Unity3d  3D横版跑酷系列(Character Controller组件) @广州小龙 目前在做一个3D跑酷的横版游戏,目前说一下 Character Controller组件! 1.Slop ...

随机推荐

  1. wap网站safari浏览器和微信cooke不能登录问题

    wap网站safari浏览器cooke不能登录问题: http://wenku.baidu.com/link?url=VnPxl43PySYVygt09vkQ7xwxOD0JCXNtw3Fx7100j ...

  2. 程序中条用其他程序中已经存在的PERFORM

    PARAMETERS p_sub(40) TYPE c. DATA fssub(40) TYPE c. fssub = p_sub. TRY.     PERFORM (fssub) IN PROGR ...

  3. SharePoint 2013 排错之"Code blocks are not allowed in this file"

    今天,设置页面布局的自定义母版页时,设置完了以后保存,然后预览报错,错误如下截图:删掉自定义母版页的MasterPageFile属性,页面依然报错:感觉甚是奇怪,因为有版本控制,还原为最初的版本,依然 ...

  4. 如何利用ArcGIS Engine接口实现打开Raster Catalog中的某一幅指定的影像?

    将IRasterCatalog转化为ITable,然后通过ITable.GetRow返回指定索引的IRow,将IRow转为IRasterCatalogItem,进而获取IRasterCatalogIt ...

  5. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  6. 【读书笔记】iOS-NSDictionary与NSArray的比较

    有时候为什么不用数组存储然后在数组里查询数值呢?字典(也称为散列表或关联数组)使用的是键查询的优化存储方式.它可以立即找出要查询的数据,而不需要遍历整个数组进行查找.对于频繁的查询和大型的数据集来说, ...

  7. UnityShader之顶点片段着色器Vertex and Fragment Shader【Shader资料】

    顶点片段着色器 V&F Shader:英文全称Vertex and Fragment Shader,最强大的Shader类型,也是我们在使用ShaderLab中的重点部分,属于可编程管线,使用 ...

  8. iOS 编译报错

    Undefined symbols for architecture i386: “_OBJC_CLASS_$_XXX”, referenced from: objc-class-ref in XXX ...

  9. CGContextRef使用简要教程

    CGContextRef使用简要教程 Graphics Context是图形上下文,也可以理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个 ...

  10. gradle研究

    gradle介绍:http://www.oschina.net/p/gradle gradle官网:https://gradle.org gradle的  eclipse 插件:http://www. ...