[Unity-3D] 小女孩与巡逻僵尸

小女孩与巡逻僵尸


  • 游戏设计要求:
    • 创建一个地图和若干巡逻兵(使用动画);
    • 每个巡逻兵走一个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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值