unity自动生成敌人_Unity学习笔记一:敌人模块和敌人生成器模块脚本编写思路梳理(1)...
此专栏为B站视频 av28779788 的三部分 Unity脚本部分《英雄无敌》项目的敌人模块和敌人生成器模块的思路梳理。至于为什么要写成专栏,一是为了自己留存,二是为了知识分享,如果有疑问,欢迎来提问;如果发现错误,请您务必指正,谢谢。
一、策划需求分析
敌人模块:敌人模块策划
将策划内容细分可分为:敌人的行为:前进,转向下一个目标点,沿路线寻路到终点
敌人的状态:血量,受伤减血,死亡
敌人需要用到的动画:跑步,攻击,闲置,死亡
根据需求确定编写四个类:通过敌人AI去控制上面三个类
提前设定好的敌人移动路线结构
EnemyMotor类:敌人马达,提供移动、旋转、寻路功能
移动功能:
通过改变物体Transform的z轴位置实现,需要变量 移动速度(moveSpeed)
因为是在Update里调用所以要通过moveSpeed*Time.deltaTime来保证不同渲染帧间隔下移动的距离相同。
转向目标点功能:
Transform类的LookAt(Vector3 targetPoint)方法可以实现,targetPoint为目标点的三维坐标,所以该方法需要传入目标点的三维坐标。
寻路功能:
技巧:为了方便测试寻路方法能否实现,可以先写入Transform[ ]类型的公开字段,再在unity里直接将WayPoint拖进脚本
寻路功能需要返回一个bool类型的返回值,来表示是否可以继续寻路(false:否,true:是);当路线不为空或到达终点时为返回false,否则调用LookRotation(targetPoint)和MovementForward()方法,并进行判断当前物体和目标点的距离是否接近,如果接近,将目标点定为下一个目标点,最后返回true
到这里EnemyMotor的功能基本实现,在Update()里调用PathFinding方法测试
测试效果如图
EnemyStatusInfo类:敌人状态信息类,定义敌人信息,提供受伤死亡功能
敌人当前血量:
定义字段:
敌人最大血量:
定义字段:
受伤功能:
通过每次调用减少敌人当前血量的方法实现,需要传入float类型变量amount表示应减少的血量,为了防止敌人当前血量变为负数,判断HP是否大于amount,如果大于,正常减少,否则HP = 0,并调用死亡的方法(因为死亡方法还没写,先以注释形式写出)
死亡功能:
摧毁敌人物体,可以用Object类里的Destroy方法实现,因为死亡前还要播放动画,所以摧毁模型需要一定的时间延迟,定义float类型字段deathDelay来表示死亡延迟时间
该方法写完后去掉Damage方法里的注释符
在OnGUI()方法内设置按钮调用Damage(amount)方法测试
Game面板现象
Component现象
为防止后期更换动画导致脚本大面积改动,将动画分成两个类实现:EnemyAnimation类:敌人状态信息类,定义敌人信息,提供受伤死亡功能
AnimationAction类(工具类):动画行为类,提供有关动画的行为
先编写AnimationAction类:因为此类为工具类,所以不需要继承MonoBehaviour
定义字段:
播放动画功能:通过Animation类的CrossFade(animName)实现,所以该方法需要传入应播放的动画的名字
判断动画是否正在播放功能:通过Animation类的IsPlaying(animName)方法实现,正在播放返回true,否则false
构造函数:为了获取附加在敌人身上的动画组件引用,所以构造函数需要传入Animation类的变量赋值给字段anim
再编写EnemyAnimation类:
定义字段(需要用到的动画):
定义字段:
为防止物体最初就要播放动画但action未初始化造成的异常,所以Awake()方法内对action初始化;因为Animation组件实在Model上而不是在Soldier1上,所以要通过GetComponentInChildren()方法获取Model上的组件
因为未写EnemyAI类所以无法检验动画播放
EnemyAI类:判断敌人状态,执行相应行为
定义枚举(列出敌人所有的状态):
定义字段:
定义字段(因为EnemyAI要用到EnemyMotor和EnemyAnimation的方法):
在Start()内对motor和anim进行定义
判断状态功能:因为要一直判断状态,所以在Update内写switch判断(因为对应方法还没编写,所以加上注释)
攻击方法Attack():播放攻击动画,攻击后播放闲置动画,重复执行,所以需要定义攻击计时器字段atkTimer和攻击间隔时间字段atkInterval,为了让攻击动画播放全,所以播放闲置动画前要判断攻击动画是否播放完
寻路方法PathFinding():执行EnemyMotor的寻路方法,如果返回值为true则播放跑步动画,否则将当前敌人状态变为Attack
死亡方法Death():为了防止反复播放死亡动画,设置bool类型字段live标记敌人是否存活,并在判断状态前加上判断
因为敌人死亡方法的执行是在EnemyStatusInfo类执行的,所以要对该类的Death方法进行修改,要改变EnemyAI的当前敌人状态
而EnemyAI类内的Death方法执行:将live状态变为false,并播放死亡动画
将EnemyAnimation填上对应的动画名字
测试结果(开枪的火光没有设置,请忽略):
到这里敌人模块基本完成,在编写敌人生成器时,还会进行部分修改,敌人生成器部分会在《Unity学习笔记一:敌人模块和敌人生成器模块脚本编写思路梳理(2)》中列出(绝对不是因为这次写累了,不想写了( ̄▽ ̄)")
unity自动生成敌人_Unity学习笔记一:敌人模块和敌人生成器模块脚本编写思路梳理(1)...相关推荐
- Unity API常用方法和类学习笔记2
Unity API常用方法和类学习笔记2 ------Mathf & Input & Vector & Random 类Mathf 一.静态变量 print(Mathf.Deg ...
- Unity开发基础——使用字符串学习笔记
蓝鸥Unity开发基础使用字符串学习笔记 本节内容:使用字符串:字符串拼接.转义字符 一.字符串拼接:字符串可以使用+或+=进行字符串拼接!! using System; namespace Less ...
- Unity API常用方法和类学习笔记1
Unity API常用方法和类学习笔记1 ------主要构架(Unity-Engine.GameObject.Component) 事件 一.事件执行顺序 二.测试代码 using System.C ...
- Unity的VRTK捡拾物体学习笔记
Unity的VRTK捡拾物体学习笔记 1.VRTK捡拾物体设置: 2.VRTK可交互对象设置: 3.触摸设置: 4.触摸设置2:
- Auto_ML自动机器学习之TPOT——学习笔记(1)
Auto_ML自动机器学习之TPOT--学习笔记(1) 前言 TPOT简介 入门练习 练习 前言 没有python的基础,也不是程序员,而自动机器学习也号称要让我们这些小白会用,遂学之. TPOT简介 ...
- Auto_ML自动机器学习之TPOT——学习笔记(2)
Auto_ML自动机器学习之TPOT--学习笔记(2) 数据预处理 mat文件格式转化为csv 批量读取文件路径 整合--批量mat转csv多文件合并 数据预处理 mat文件格式转化为csv 环境 W ...
- 智能网联汽车自动驾驶仿真技术学习笔记(一)
智能网联汽车自动驾驶仿真技术学习笔记(一) 绪论 一.自动驾驶汽车分级 二.先进驾驶辅助系统 三.环境感知传感器 四.自动驾驶仿真系统的构成 五.自动驾驶功能测试 绪论 一.自动驾驶汽车分级 以下是由 ...
- 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!
从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...
- 自动驾驶——图像识别的学习笔记
1 前言 在此次的自动驾驶任务中,我们需要完成图像识别的任务: 2 模型选择-- 3 模型修改--修改最后一层FC层 具体的写作方式可以参考博文--<Pytorch学习笔记(I)--预训练模型( ...
- 一个非常棒的Unity入门教程(附上学习笔记)
非常适合入门的unity教程,知识点全面,声音清晰,基本没有废话,时间控制得当,UP主Michael还在更很多其他的unity相关教程 视频教程地址:https://www.bilibili.com/ ...
最新文章
- 1-runtime的Method,IMP,Property,ivar
- Merry Christmas Happy New Year!!
- 反欺诈技术揭秘-设备指纹VS关系网络模型 此博文包含图片	(2017-05-12 10:23:52)转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型	分类: 风控 文章来源:网络(经整合梳理
- 【十九】require和include的区别
- sys/queue.h分析(图片复制不过来,查看原文)
- JAVA入门级教学之(方法-7)
- C语言如何处理不定长度参数,C语言中不定参数的实现
- git命令出现fatal: unable to access SSL certificate problem: self signed certificate
- python安装pillow图形处理库
- 17. 促销,市场营销和内容页
- 酷狗php 技术题目,广州酷狗php面试题(赋答案)
- Axure| .rp的文件怎么转化为.rplib
- ubantu20刷新DNS缓存的命令
- 基于FPGA的YCbCr颜色空间中颜色参数的变化
- HBase-2.0 MOB解决海量图片存储方案
- PPP和PPPOE详解
- Unity制作别踩白块儿
- “指尖上的中华”非遗国技互动展亮相上海徐家汇站
- 服务器ip导致微信域名红,微信/QQ域名检测-最新腾讯域名检测官方接口
- 博主独资创办-卓明网,即将上线,敬请期待!
热门文章
- 如何写出吸引人的广告文案(一)
- 连接HDMI出现没声音
- java山地车 故障,山地车经常会出现的十个小故障,你都遇到了几个
- 什么是web services?它有什么作用,以及它如何实现?
- 用matlab编写SIR模型对SARS期间疫情数据进行模拟
- 【Paper】法律科技方面论文汇总
- 生命的火花盛开与如幻如梦
- 第3章【思考与练习4】数据清洗,从studentsInfo.xlsx 文件的“Group1”表单中读取数据。数据填充,使用习题1的数据,使用列的平均值填充“体重”和“成绩”列的NaN数据。
- React 16 源码解析笔记 02 - JSX 转换为 ReactElement 的过程
- PLC可编程控制器实训设备