要求
订阅与发布模式
- 我的理解是相当于一些社交软件,明星发布信息,通过中间平台,订阅者可以收到其信息。
- 订阅者与发布模式的优点:
- 松耦合:可以将众多需要通信的子系统(Subsystem)解耦,每个子系统可以分别管理,子系统的状态不影响整体系统的运行。
- 高伸缩性:增加了系统的可伸缩性,并提高了发送者的响应能力。发送方只需要向“平台”发送信息,就可以继续处理自己的核心业务,而不必关心子系统的运行情况。“平台”负责将信息传到订阅者。
- 高可靠性:提高了可靠性。异步的消息传递有助于应用程序在增加的负载下继续平稳运行,并且可以更有效地处理间歇性故障
- 灵活性:不必关心子系统是如何组合到一起的,只要整体系统平稳运行即可
- 可测试性:提高了可测试性。通道可以被监视,消息可以作为整体集成测试策略的一部分而被检查或记录。
- 我们采用了GameEventManager作为订阅者和发布者模式的“公众号”
资源一览
- Asset
- Perfabs
- Scripts
- Animations
- tt:使用了巡逻兵动画的一些组件,在资源包中,这里没显示出来
- New Animator 1:这个是从主角小姐姐自带的动画改的
- tt:使用了巡逻兵动画的一些组件,在资源包中,这里没显示出来
游戏内截图
这里主角小姐姐跟巡逻兵碰撞,游戏失败
主要代码
- FirstSceneController: 统筹全局,这里控制了玩家的攻击方式和计分
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class FirstSceneController : MonoBehaviour, IUserAction, ISceneController
{
public PatorlFactory _PatorlFactory; //巡逻者工厂
public ScoreRecorder _ScoreRecorder; //记录员
public PatrolActionManager _PatrolActionManager; //运动管理器
public int wall_sign = -1; //当前玩家所处哪个格子
public GameObject player; //玩家
private List<GameObject> patrols; //场景中巡逻者列表
private bool game_over = false; //游戏结束
void Update()
{
for (int i = 0; i < patrols.Count; i++)
{
patrols[i].gameObject.GetComponent<PatrolData>().wall_sign = wall_sign;
}
//20分结束游戏
if(_ScoreRecorder.score == 20)
{
Gameover();
}
}
void Start()
{
SSDirector director = SSDirector.GetInstance();
director.CurrentScenceController = this;
_PatorlFactory = Singleton<PatorlFactory>.Instance;//巡逻者工厂
_PatrolActionManager = Singleton<PatrolActionManager>.Instance;//巡逻者的动作管理器
//ISceneController接口中函数的实现
LoadResources();
_ScoreRecorder = Singleton<ScoreRecorder>.Instance;//拿到计分的单实例对象
}
//加载资源
public void LoadResources()
{
player = _PatorlFactory.LoadPlayer();//player
patrols = _PatorlFactory.LoadPatrol