前言

许久没有更新日志了,之前写了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. ArrayList 与 LinkedList

    ArrayList:数组结构,插入删除的效率低,查询的效率较高. LinkedList:链接数据结构,插入删除的效率较高,查询的效率低. 两者的使用 ArrayList:适合用作添加数据,做查询. L ...

  2. Postman的使用

    在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...

  3. 2015年第2本(英文第1本):《The Practice of Programming》

    2015年计划透析10本英文原著,最开始选定的第一本英文书是<Who Moved my Cheese>,可是这本书实在是太短.太简单了,总体的意思就是要顺应变化,要跳出自己的舒适区,全文不 ...

  4. 第一个WCF的程序

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

  5. 初识 Android

    创建博客有一年的时间了,一直没把它用起来,颇感惭愧.近日突感有写博客的冲动,更可怕的是这种冲动似乎比我体内的洪荒之力更为凶猛.于是乎,这篇博客悄然诞生.废话不多说,进入正题--初识Android. 这 ...

  6. Jenkins部署.net自动化构建

    1.环境部署: windows server 2008R2环境   2.相关软件 SVN(源代码管理器:jenkins通过插件从源代码管理器下载代码)   Jenkins(主角)地址:http://f ...

  7. 【读书笔记】iOS-NSString的length

    NSString的length方法能够准确无误地处理国际字符串,如含有俄文,中文或者日本文字符的字符串,以及使用Unicode国际字符标准的字符串.在C语言中处理这些国际字符串是件令人非常头疼的事情 ...

  8. iOS中的单例模式

    概念相关 单例模式 在程序运行过程,一个类只有一个实例 使用场合 在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次) static static关键字会在声明变量的时候分配内存,在程序运行 ...

  9. IOS之UI--小实例项目--综合使用

    前言: 本博文是基于前一个小实例项目:IOS之UI--小实例项目--添加商品和商品名 进行继续综合学习积累的. 内容大纲 01-综合使用01-plist的使用 02-综合使用02-模型取代字典的好处分 ...

  10. ssh key scp命令 scp无密码传输

    ssh ~/.ssh/目录下通常有个文件 [root@user .ssh]# ll 总用量 16 -rw-------. 1 root root 552 11月 16 02:48 authorized ...