ch07-模型与动画——巡逻兵小游戏

本文介绍了在Unity中使用订阅与发布模式实现一个巡逻兵小游戏的详细过程,包括GameEventManager作为中介,控制巡逻兵的移动、跟随及碰撞检测。主要内容包括FirstSceneController的全局控制、AreaDetection的碰撞检测、GameEventManager的信息发布、PatrolFactory的巡逻兵生成、GoPatrolAction和PatrolFollowAction的巡逻和跟随逻辑,以及PlayerCollideDetection的碰撞响应。此外,还分享了项目资源和配置细节。
摘要由CSDN通过智能技术生成

要求

在这里插入图片描述


订阅与发布模式

  • 我的理解是相当于一些社交软件,明星发布信息,通过中间平台,订阅者可以收到其信息。
  • 订阅者与发布模式的优点:
    • 松耦合:可以将众多需要通信的子系统(Subsystem)解耦,每个子系统可以分别管理,子系统的状态不影响整体系统的运行。
    • 高伸缩性:增加了系统的可伸缩性,并提高了发送者的响应能力。发送方只需要向“平台”发送信息,就可以继续处理自己的核心业务,而不必关心子系统的运行情况。“平台”负责将信息传到订阅者。
    • 高可靠性:提高了可靠性。异步的消息传递有助于应用程序在增加的负载下继续平稳运行,并且可以更有效地处理间歇性故障
    • 灵活性:不必关心子系统是如何组合到一起的,只要整体系统平稳运行即可
    • 可测试性:提高了可测试性。通道可以被监视,消息可以作为整体集成测试策略的一部分而被检查或记录。
  • 我们采用了GameEventManager作为订阅者和发布者模式的“公众号”

资源一览

  • Asset
    在这里插入图片描述
  • Perfabs
    在这里插入图片描述
  • Scripts在这里插入图片描述
  • Animations
    在这里插入图片描述
    • tt:使用了巡逻兵动画的一些组件,在资源包中,这里没显示出来
      在这里插入图片描述
    • New Animator 1:这个是从主角小姐姐自带的动画改的
      在这里插入图片描述

游戏内截图

在这里插入图片描述
这里主角小姐姐跟巡逻兵碰撞,游戏失败


主要代码

  • 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值