Unity3d作业||模型与动画
1、智能巡逻兵
- 提交要求:
- 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
- 程序设计要求:
- 必须使用订阅与发布模式传消息
- subject:OnLostGoal
- Publisher: ?
- Subscriber: ?
- 工厂模式生产巡逻兵
- 必须使用订阅与发布模式传消息
- 友善提示1:生成 3~5个边的凸多边型
- 随机生成矩形
- 在矩形每个边上随机找点,可得到 3 - 4 的凸多边型
- 5 ?
- 友善提示2:参考以前博客,给出自己新玩法
订阅与发布模式
在“发布者-订阅者”模式中,称为发布者的消息发送者不会将消息编程为直接发送给称为订阅者的特定接收者。这意味着发布者和订阅者不知道彼此的存在。存在第三个组件,称为代理或消息代理或事件总线,它由发布者和订阅者都知道,它过滤所有传入的消息并相应地分发它们。换句话说,pub-sub是用于在不同系统组件之间传递消息的模式,而这些组件不知道关于彼此身份的任何信息。经纪人如何过滤所有消息?实际上,有几个消息过滤过程。最常用的方法有:基于主题和基于内容的。
在本次游戏中,玩家结束游戏和得分的时候都会订阅一个服务,此时只需要让结束游戏或者得分这些情况产生的有效果定义GameEventManager发布的信息,通过这种方式实现功能的分类,降低代码的耦合。
UML
-
围墙
由栅栏和石墙组成
-
玩家
- 自由移动
- 碰到巡逻兵游戏结束
预制体
需要给玩家添加一个 Capsule Collider
用于检测巡逻兵与玩家的碰撞
添加一个Player的脚本,控制对象的移动
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class Player : MonoBehaviour
{
public void FixedUpdate()
{
gameObject.GetComponent<Rigidbody>().freezeRotation = true;
gameObject.GetComponent<Rigidbody>().velocity = new Vector3(0