智能巡逻兵
游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
程序设计要求:
- 必须使用订阅与发布模式传消息
subject:OnLostGoal
Publisher: ?
Subscriber: ? - 工厂模式生产巡逻兵
资源下载
在Asset Store中下载Survival Shooter资源
背景设置
将下载资源中的Environment拿来当做地图即可
订阅与发布模式
订阅与发布模式完成Player、Patrol、SceneController以及ScoreManager之间的通信。首先定义了一个抽象类Subject.cs(发布者)和一个接口Handle.cs(订阅者)。
Subject中有一个List存放所有的Handle,并且有增加和删除Handle的方法Attach ()和Detach ()。还有一个Notify ()方法向每一个Handle发送消息。Handle中则有处理Subject发送过来的消息的方法Reaction ()。Player继承Subject作为发布者将自己的状态以及位置发送给每一个Handle。
Patrol、SceneController和ScoreManager都作为Handle接受到Player发送过来的消息,但是不同的Handle则会对这些信息做出不同地处理。巡逻兵Patrol需要知道玩家的位置,以及是否存活;而SceneController和ScoreManager并不在乎玩家的位置,它们只关心玩家是不是还活着。