Unity3d学习之路-简单巡逻兵

2023-11-04

简单巡逻兵

游戏规则与游戏要求

  • 游戏规则
    使用WSAD或方向键上下左右移动player,进入巡逻兵的追捕后逃脱可积累一分,若与巡逻兵碰撞则游戏结束,收集完地图上的所有水晶即可获胜。

  • 游戏设计要求:

    • 创建一个地图和若干巡逻兵(使用动画);
    • 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
    • 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
    • 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
    • 失去玩家目标后,继续巡逻;
    • 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
  • 程序设计要求:

    • 必须使用订阅与发布模式传消息
    • 工厂模式生产巡逻兵

游戏UML类图

新增了订阅与发布模式

uml

游戏实现

巡逻兵部分

巡逻兵部分实现了进行矩形路线的自动巡逻移动,当玩家进入它的触发器范围后,如果玩家当前在自己巡逻区域内,则跟随追捕玩家。如果巡逻兵与玩家碰撞,则双方都播放碰撞后动画,游戏结束。

巡逻兵预制体

为巡逻兵添加两个Collider,一个是Capsule Collider,添加在预制体父节点上,用于检测巡逻兵与玩家的碰撞。另一个是Box Collider,添加在预制体的子节点上,用于检测玩家进入巡逻兵巡逻的范围

预制体

巡逻兵创建
  • PatrolData

保存了巡逻兵的一些基本数据

public class PatrolData : MonoBehaviour
{
    public int sign;                      //标志巡逻兵在哪一块区域
    public bool follow_player = false;    //是否跟随玩家
    public int wall_sign = -1;            //当前玩家所在区域标志
    public GameObject player;             //玩家游戏对象
    public Vector3 start_position;        //当前巡逻兵初始位置     
}
  • PropFactory

道具工厂,创建了9个巡逻兵,因为巡逻兵的位置有规律所以用循环就可以赋值初始位置,还设置了每个巡逻兵所在区域的标志。当游戏结束时候,需要工厂将巡逻兵的动画设置为初始状态。部分代码如下

public List<GameObject> GetPatrols()
{
    int[] pos_x = { -6, 4, 13 };
    int[] pos_z = { -4, 6, -13 };
    int index = 0;
    //生成不同的巡逻兵初始位置
    for(int i=0;i < 3;i++)
    {
        for(int j=0;j < 3;j++)
        {
            vec[index] = new Vector3(pos_x[i], 0, pos_z[j]);
            index++;
        }
    }
    for(int i=0; i < 9; i++)
    {
        patrol = Instantiate(Resources.Load<GameObject>("Prefabs/Patrol"));
        patrol.transform.position = vec[i];
        patrol.GetComponent<PatrolData>().sign = i + 1;
        patrol.GetComponent<PatrolData>().start_position = vec[i];
        used.Add(patrol);
    }   
    return used;
}
public void StopPatrol()
{
    //切换所有巡逻兵的动画
    for (int i = 0; i < used.Count; i++)
    {
        used[i].gameObject.GetComponent<Animator>().SetBool("run", false);
    }
}
巡逻兵巡逻与追捕
  • GoPatrolAction

巡逻兵巡逻的动作,根据四个方向来选择要去到的目的地,当当前位置与目的地相差0.9f的时候,换一个方向继续巡逻

public class GoPatrolAction : SSAction
{
    private enum Dirction { EAST, NORTH, WEST, SOUTH };
    private float pos_x, pos_z;                 //移动前的初始x和z方向坐标
    private float move_length;                  //移动的长度
    private float move_speed = 1.2f;            //移动速度
    private bool move_sign = true;              
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3d学习之路-简单巡逻兵 的相关文章

随机推荐

  • C++11数组了解

    原文链接 C 11数组 array 的使用 码到城攻使用 std array 能够让代码变得更加 现代化 而且封装了一些操作函 数 比如获取数组大小以及检查是否非空https www codecomeon com posts 221 数组介
  • Hadoop NameNode和DataNode只能启动一个问题

    DataNode和NameNode进程不能共存 启动NameNode可以正常启动 但是启动DataNode时发现 NameNode进程不存在了 导致两个无法共存 问题原因 NameNode在format初始化后会生成claserId 集群i
  • Java Web项目部署到Linux后的中文乱码问题

    问题描述 项目通过Maven打成war包传输到Linux上 SQL导出数据和结构后在Linux上的Mysql执行 数据都能正常显示 项目也是正常的访问到了index html 一切显得毫无问题 开始测试项目各个功能是否有异常 当我检查到我的
  • python练习.求s=a+aa+aaa+aaaa+aa...a的值

    题目 求s a aa aaa aaaa aa a的值 其中a是一个数字 例如2 22 222 2222 22222 此时共有5个数相加 几个数相加由键盘控制 from functools import reduce n 0 s n int
  • SegFormer 代码详解+数据流分析

    目录 代码详解 数据流分析 数据流及尺寸变化 输入为512x512x3的图片 使用b0主干网络 Encoder mit backbone Transformer Block 解码头 Head 代码详解 import torch 导入PyTo
  • java内存模型的角度分析volatile关键字

    多任务处理 多任务处理的背景 计算机的运算能力增强 计算机的运算速度与它的存储和通信子系统的速度差距太大 大量的时间都花费在磁盘I O 网络通信或者数据库访问中上 我们不希望处理器在大部分时间里都处于等待其他资源的空闲状态 计算机多任务处理
  • Thymeleaf的常用表达式及简单使用实例

    什么是Thymelaf 它是非常可拓展的 允许自定义名字来定义一组模板属性 或者甚至是标签 它还带有一些称为标准方言的东西 它们定义了一组功能 这些功能满足大多数情况 标准表达式五种类型 变量表达式 选择表达式 消息表达式 i18n 链接表
  • 不使用PCL库,C++保存PLY文件

    输入文件名和TriangulatePoints的结果 void savePLY const std string ply3D filename cv Mat pnts time t t time 0 char tmp1 64 strftim
  • 三因素方差分析_多因变量方差分析和方差成分分析

    点击蓝字关注我们 什么是多因变量方差分析 1 SPSS的一般线性模型中的多变量过程提供多因变量的方差分析 多因变量方差分析模型的因变量是尺度变量 连续变量 分类变量作为固定因素变量 协变量必须是尺度变量 该模型是基于尺度因变量与作为预测因子
  • gre报文长度解析

    pTemp为GRE报文头指针 unsigned char getGreHdrLen unsigned char pTemp unsigned char greflags1 pTemp unsigned char greflags2 pTem
  • poj 3280 Cheapest Palindrome(区间DP)[增删改变简单回文串]

    题目大意 给出一个由n个小写字母组成的 长度为m的字符串字符串来 对这个字符串进行删除字母或者添加字母 使得该字符串是一个回文串 每一步删除和添加每个字母都有对应的代价 求将该字符串转成回文串的最小代价 对于一个串来说在一端删除一个字母和再
  • dy之__ac_signature

    文章目录 目标网站 参数定位 补环境代码 python 测试 往期逆向文章推荐 JS逆向之今日头条signature JS逆向之淘宝sign JS逆向之知乎jsvmp算法 JS逆向之艺恩数据 JS逆向之网易云音乐 JS逆向之巨量星图sign
  • 如何去实践一个完整的数据挖掘项目?

    每日一问 如何去实践一个完整的数据挖掘项目 机器学习项目 1 抽象成数学问题 明确问题 2 获取数据 3 特征预处理与特征选择 4 训练模型与调优 5 模型诊断 6 模型融合 非必须 7 上线运行 大部分机器学习项目死在第1步和第2步 平时
  • Python删除缺失值所在行

    转载 https blog csdn net qq 35843543 article details 106471278 关键内容 data dropna how all 传入这个参数后将只丢弃全为缺失值的那些行 data dropna a
  • python+webdriver解决:web页面大小调整和滚动

    因为页面显示不全导致页面的元素定位失败 可以缩小 滚动web页面把想要定位的元素显示出来 原地址连接 https www cnblogs com wdana p 12037567 html
  • 【目标检测】18、RetinaNet:Focal Loss for Dense Object Detection

    文章目录 一 背景 二 方法 2 1 Focal loss 2 2 RetinaNet 网络结构 三 效果 论文 Focal Loss for Dense Object Detection 代码 https github com faceb
  • mybatis mysql 批量_mysql使用mybatis批量更新问题

    一 好言 在光芒万丈之前 我们都要欣然接受眼下的难堪和不易 接受一个人的孤独和偶尔的无助 二 背景 其实这是在处理一个问题的时候 需要批量更新数据 结果这个批量更新数据是有问题的 所以改了顺便记载下 问题 SQL update t user
  • spring boot版本太高导致Error creating bean with name ‘configurationPropertiesBeans‘ defined in class path

    org springframework beans factory BeanCreationException Error creating bean with name configurationPropertiesBeans defin
  • Acwing算法提高课—搜索

    搜索 BFS Flood Fill AcWing 1097 池塘计数 AcWing 1098 城堡问题 AcWing 1106 山峰和山谷 最短路模型 AcWing 1076 迷宫问题 AcWing 188 武士风度的牛 AcWing 11
  • Unity3d学习之路-简单巡逻兵

    简单巡逻兵 简单巡逻兵 游戏规则与游戏要求 游戏UML类图 游戏实现 巡逻兵部分 巡逻兵预制体 巡逻兵创建 巡逻兵巡逻与追捕 玩家部分 区域部分 订阅与发布模式部分 发布事件类 订阅者 水晶触碰 玩家