[3D跑酷] MissionManager
前言
许久没有更新日志了,之前写了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的更多相关文章
- 3D跑酷遇到的问题
前言 项目名称:3D跑酷项目 写作目地:使用Asset Server进行多人协作开发过程中,记录遇到的问题 问题1:UIAtlas无法自动更新 描述:NGUI的Atlas图集(图片)无法自动更新 后果 ...
- 3D跑酷游戏《月影忍者之疾风狂逃》
<月影忍者之疾风狂逃>是一款3D跑酷游戏,也是我实习的时候参与的一个项目,在那个公司我学到了很多东西,谢谢他们.大家可以去玩玩这个游戏啊,还是不错的哦.
- [3D跑酷] GUIManager UI管理
UI元素更新及界面跳转 继上篇日志<Unity开发之 GUIClickEventReceiver>,再谈一下我们如何管理游戏中的UI元素更新及界面跳转 UI绑定 图一:Inspector面 ...
- [3d跑酷] Xcode5 打包 发布配置
主题 Unity导出Xcode项目,使用Xocde打包ipa并提交到AppStore xcode发布配置 1.设置发布相关参数,比如 包名,版本,证书,ios设备版本 2.设置体系结构,支持的平台(I ...
- [3D跑酷] DataManager
DataManager管理游戏中数据,当然这个类中大部分的属性和方法都是Public 函数列表
- [3D跑酷] GameManager
GameManager在游戏中很重要,处理整个游戏的流程,但是在这个类中尽量也只是写一些重要的方法,调用其它类中的方法. 枚举项 函数列表 方法解释 //当玩家碰到障碍(障碍Type,碰撞Positi ...
- [3D跑酷] UI事件处理系统
在我们的Unity游戏项目中,GUI的表现采用NGUI.记录一下我们的处理方式: 需要解决的问题 1.需要处理大量按钮的点击事件 2.需要处理界面跳转事件 3.需要处理界面元素更新事件 解决方案 GU ...
- [3D跑酷] AudioManager
Unity音频管理 游戏中的声音管理最常用的组件莫过于AudioSource和AudioClip,我的做法是建立是一个AudioManager类(单例类)管理各个音频,谈一下我的经验: 函数列表 St ...
- Unity3D 3D横版跑酷
Unity3d 3D横版跑酷系列(Character Controller组件) @广州小龙 目前在做一个3D跑酷的横版游戏,目前说一下 Character Controller组件! 1.Slop ...
随机推荐
- Python for循环内部实现的一个sample
#!/usr/bin/env python # -*- coding: utf-8 -*- it = iter([1,2,3,4,5]) while True: try: x = next(it) p ...
- [Intellij] 编译报错 javacTask
报错信息: Idea 编译报错 javacTask: 源发行版 1.6 需要目标发行版 1.6 解决方案:
- ServiceLocator是反模式
关于ServiceLocator模式 http://www.cnblogs.com/hwade/archive/2011/01/30/CommonServiceLocator.html 为什么是Ant ...
- 破解 “PEDIY CrackMe 2007” 之 KeygenMe_1_by_boonz
系统 : Windows xp 程序 :KeygenMe_1_by_boonz 程序下载地址 :http://www.crackmes.de/users/boonz/keygenme_1_by_boo ...
- mysql常见的运算符及使用
mysql中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 算术操作符 算术操作符是SQL中最基本的操作运算符,主要有一下几种运算符: +(加). -(减). *(乘). / ...
- [ html canvas 模仿支付宝刮刮卡效果 ] canvas绘图属性 模仿支付宝刮刮卡效果实例演示
<!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...
- 自定义带进度条的WebView , 增加获取web标题和url 回掉
1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graph ...
- iOS面试中常见的算法题目
一.前言 这里是在iOS求职中自己遇到的算法题,希望对大家有所帮助.不定期更新.如果大家想在线运行代码调试,可以将代码拷贝到这里.然后进行调试.下面就是常见的算法题目. 二.正文 1.就n的阶乘.(这 ...
- iOS开发笔记1:ToDoList、相册、地图应用及新浪微博
前段时间做了一些小东西,一些关键点记录总结如下 1.ToDoList 主要是使用UITableView以及NSUserDefaults完成任务管理,可新建.编辑及删除任务. 因为是Demo性质,所以利 ...
- Effective Java 29 Consider typesafe heterogeneous containers
When a class literal is passed among methods to communicate both compile-time and runtime type infor ...