上一篇博文主要讲解了使用状态模式进行游戏场景的切换。这篇文章就开始讲解外观模式在游戏开发中的简单应用。 接着上一篇,我们此时到了战斗场景哈(开始场景和菜单场景什么的在这个项目中就起到一个大概界面跳转应用,在游戏中战斗场景最为核心),接下来我们就使用外观模式作为战斗场景的主要管理模式,为啥是外观模式呢?因为,在战斗场景中,设计到模块很多很杂,比如有什么兵营系统,关卡系统,角色管理系统,成就系统等等,假如我们把这些系统全都写在一个战斗场景的FightState类中,那样FightState类会很乱很臃肿。所以此时我们就需要一个外观类来管理这些杂乱的系统,而在战斗场景FightState类中只需要持有一个外观类的引用,然后管理外观类即可。可能你还会不理解,那我就先从大概的最基础的外观模式讲起:
外观模式学习原文连接:http://blog.csdn.net/lovelion/article/details/8258121
好了,我默认你理解了外观模式哈,接着给出在该游戏中的UML类图(可对比上面的UML类图理解):
其中的?符号部分是以后等待完善的各个由外观模式管理的子系统,如上文提及到的兵营系统,关卡系统等,GameFaced类就是这里的外观类,用来管理子系统的,而BattleState就是上一篇博客说的战斗场景FightState类。总的理解起来就是战斗场景FightState类管理GameFaced外观类,然后由外观类去管理各个子系统,这样就避免了战斗场景直接管理子系统造成战斗场景杂乱臃肿。
说到这里我想你应该理解了,那我就给出代码哈(如果还不理解,请评论不理解的地方,我会做出答复):
1.GameFaced游戏中的外观类:
using UnityEngine;
using System.Collections;
/// <summary>
/// 游戏上的外观模式类
/// </summary>
public class GameFaced{
private bool isGameOver = false;//游戏是否结束
public bool IsGameOver
{
get{ return isGameOver; }
}
/// <summary>
/// 初始化函数,初始化需要管理的各个子系统(具体状态内容还待开发。。。)
/// </summary>
public void Init() { }
/// <summary>
/// 子系统状态更新方法
/// </summary>
public void Update() { }
/// <summary>
/// 更换子系统状态时释放资源方法
/// </summary>
public void Release() { }
}
2.更改完善上一篇博客中的战斗场景(FightState类),持有一个外观模式的引用,用于管理外观类。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
/// <summary>
/// 第三状态(战斗场景)
/// </summary>
public class FightState : ISceneState
{
/// <summary>
/// 开始界面(状态)构造方法
/// </summary>
/// <param name="sceneName">场景名</param>
/// <param name="sceneController">场景控制器</param>
public FightState(string sceneName, SceneStateController sceneController) : base(sceneName, sceneController){}
private GameFaced gameFaced;//持有一个外观模式的引用
public override void StateStart()
{
gameFaced.Init();
}
public override void StateEnd()
{
gameFaced.Release();
}
public override void StateUpDate()
{
if (gameFaced.IsGameOver == true)//如果游戏结束就换到主菜单界面
{
sceneController.SetState(new MainMenuState("MainMenu", sceneController));
}
gameFaced.Update();
}
}
注:整个Demo项目我会放在Github上,可自行下载学习:https://github.com/MrZhiFu/Design-Patterns-In-the-game;建议下载压缩文件形式