小女孩与巡逻僵尸
- 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
- 程序设计要求:
- 必须使用订阅与发布模式传消息
subject:OnLostGoal
Publisher: ?
Subscriber: ? - 工厂模式生产巡逻兵
- 必须使用订阅与发布模式传消息
规则介绍
玩家使用ws或者↑↓控制角色前进/后退,使用ad或者←→控制角色向左向右转。控制角色避开僵尸的追击,每逃避一次就加一分,最高记录将一直显示。
视频演示
[Unity-3d]小女孩与鬼畜巡逻僵尸
订阅发布模式
本次作业要求使用订阅发布模式实现。简单来说,订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。该模式中发布者和订阅者没有直接的耦合,是实现模型与视图分离的重要手段。具体到这次的作业,将涉及到逃离僵尸追踪和被僵尸追上等事件需要监听,定义一个发布事件类,以及在场记类中实现订阅者,代码如下:
发布者
// 发布事件类 EventManager.cs 中的发布者
// 时间响应:分数变化
public delegate void scoreEvent();
public static event scoreEvent changeScore;
// 事件响应:游戏结束
public delegate void gameOverEvent();
public static event gameOverEvent gameOver;
// 事件1:逃离僵尸
public void PlayerEscape()
{
if (changeScore)
changeScore();
}
// 事件2:被僵尸追上
public void PlayerGameover()
{
if (gameOver)
gameOver();
}
订阅者
// 场记类 SceneController.cs 中的订阅者
public PatrolFactory patrolFactory; // 僵尸工厂
public ScoreRecorder recorder; // 记分牌
public PatrolActionManager actionManager; // 僵尸动作管理者
private bool isOver = false; // 游戏结束标识
void OnEnable() // 注册订阅
{
EventManager.changeScore += AddScore;
EventManager.gameOver += GameOver;
}
void OnDisable() //取消订阅
{
EventManager.changeScore -= AddScore;
EventManager.gameOver -= GameOver;
}
void AddScore() // 记分牌变化
{
recorder.addScore(); // 加分
}
void GameOver() // 游戏结束变化
{
isOver = true; // 游戏结束
patrolFactory.reset(); // 重置巡逻僵尸位置
actionManager.freezeAllAction(); // 停止所有僵尸动作
}
游戏具体部分实现
其实要实现的部分还算是比较多的,主要有巡逻僵尸部分、玩家角色部分、UI、记分牌等等,接下来将说一下核心的代码部分。
地图
首先当然是搭建地图啦,大家可以在AssetsStore上找到很多很好看的又免费的资源,但是为了节约时间&#x