先放Github地址:https://github.com/kotomineshiki/SearchArmy
视频地址:https://www.bilibili.com/video/av23326530/
动作表格
触发条件 | 动作对象 | 对象行为 | 实现位置 |
---|---|---|---|
按下开始键 | 全体 | 允许移动 | UserGUI |
(开始后)按下方向键 | 游戏主角 | 向各个方向运动 | UserGUI |
敌人未看到主角 | 敌人 | 进行特定路线的巡逻 | GoPatrolAction |
敌人看到主角 | 敌人 | 开始追逐主角 | Eye Sight |
主角碰到友军 | 分数管理器 | 分数++ 并且剩余友军数目– | GameEventManager |
主角碰到友军 | 友军 | 开始跟随主角 | |
跟随状态的友军被敌人碰到 | 友军 | 放弃跟随 | |
敌人碰到主角 | 主角 | 主角死亡,游戏结束 | |
主角队伍碰到终点 | 主角 | 游戏结束,获得胜利 |
玩法部分
主角闯入了德军总部,他需要解救自己被囚禁的战友(方块来表示)并带领他们达到出口。他们在行进途中需要避开巡逻兵的追捕。
这次我没有按照之前同学做的规则来实现,而是自己重新制定了玩法。本次demo中使用了订阅与发布模型、工厂模式、单例模式
订阅与发布模式
这次的游戏结束控制和友军碰触时用订阅与发布模式做的。这个模式很像uwp中的委托。
订阅与发布模式也被称为观察者模式。其定义为:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。其有以下特征
- 发布者与订阅者无直接耦合关系
- 分离事件与实现
订阅发布的起源:这个系统最早是为了实现成就系统。比如说总数类成就:击杀某敌人300次。如果不使用本系统,那么会导致一个问题:每想增加一个成就,都会导致运行逻辑代码的修改。而且随着成就系统的复杂,运行逻辑代码会变得十分庞大——处处遍布着“补丁”。 订阅模式使得这一部分代码得以从运行逻辑中分离,在逻辑代码中只负责发布消息,在成就系统中订阅这些消息。
简单来说,观察者模式是希望“事件发生”和“功能实现”分离开。
那么观察者是如何实现的呢?在c++中的函数指针,也就是c#中的委托可以用。剩下就是代码了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameEventManager : MonoBehaviour
public delegate void GameoverEvent();
public static event GameoverEvent GameoverChange;
public delegate void FriendTouchEvent();
public static event GameoverEvent FriendTouchChange;
pu