【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能

文章目录

  • 敌人导航
  • 敌人动画
    • 导入动画
    • 修改循环动画配置
    • 其他不循环的动画配置
  • 配置敌人模型
  • 动画配置
  • 敌人受伤死亡脚本控制
  • 敌人状态机
    • 待机 行走 巡逻 攻击状态
    • 修改待机行为脚本
    • 修改巡逻行为脚本
    • 修改追击行为脚本
    • 修改攻击行为脚本
  • 删除旧的动画控制代码
    • 创建寻路点
  • 修改代码,实时显示敌人各个状态的范围
  • 敌人攻击我们进行了裁剪
  • 人物受击效果
  • 添加血液效果
  • 添加音效
  • 完结

敌人导航

在这里插入图片描述
在这里插入图片描述
选中地面,设置为静态导航
在这里插入图片描述
点击烘培
在这里插入图片描述
选中一些障碍物,也设置为静态导航
在这里插入图片描述
选择为不适合步行
在这里插入图片描述
重新点击烘培,一些障碍物区域就不可以行走了
在这里插入图片描述

敌人动画

可前往mixamo官网获取动画:https://www.mixamo.com/#/?page=1&type=Motion%2CMotionPack

导入动画

所有动画都配置为人类,并设置统一骨骼
在这里插入图片描述
ctrl+d复制出动画,删除原来模型动画
在这里插入图片描述

修改循环动画配置

这将时他移动时,动画看起来更好

比如走路 奔跑 攻击 待机动画
在这里插入图片描述
攻击动画也一样
在这里插入图片描述

其他不循环的动画配置

比如死亡 收击动画
在这里插入图片描述

配置敌人模型

在这里插入图片描述
配置导航参数
在这里插入图片描述

动画配置

在这里插入图片描述

在这里插入图片描述
提高行走动画速度
在这里插入图片描述
敌人速度也跟着修改
在这里插入图片描述
配置受击 两个死亡动画
在这里插入图片描述
在这里插入图片描述
提升受击动画播放速度
在这里插入图片描述
如果僵尸死亡,我们再射击,又会播放一次受击动画,但是什么都不会发生,然后卡在这里,我们可以在受击加一个空过渡到待机动画,什么都不需要修改
在这里插入图片描述

敌人受伤死亡脚本控制

public class Enemy : MonoBehaviour
{[SerializeField] private int HP = 100; // 敌人的生命值private Animator animator; // 动画控制器组件private NavMeshAgent navAgent; // 导航代理组件private void Start(){animator = GetComponent<Animator>(); // 获取动画控制器组件navAgent = GetComponent<NavMeshAgent>(); // 获取导航代理组件}public void TakeDamage(int damageAmount){HP -= damageAmount; // 扣除伤害值if (HP <= 0){int randomValue = Random.Range(0, 2); // 生成随机数,0或1if (randomValue == 0){animator.SetTrigger("DIE1"); // 播放死亡动画1}else{animator.SetTrigger("DIE2"); // 播放死亡动画2}}else{animator.SetTrigger("DAMAGE"); // 播放受伤动画}}private void Update(){if (navAgent.velocity.magnitude > 0.1f){animator.SetBool("isWalking", true); // 设置isWalking参数为true,播放行走动画}else{animator.SetBool("isWalking", false); // 设置isWalking参数为false,停止行走动画}}
}

子弹攻击调用
在这里插入图片描述

效果
在这里插入图片描述

在这里插入图片描述

敌人状态机

待机 行走 巡逻 攻击状态

过渡配置都去掉退出时间勾选,修改过渡持续时间为0.2
在这里插入图片描述
添加过渡参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
绑定动画,攻击动画 追击为奔跑动画
在这里插入图片描述
在待机处添加一个动画行为脚本
在这里插入图片描述
其他的状态,也都添加不同的行为脚本
在这里插入图片描述

修改待机行为脚本

在这里插入图片描述

在这里插入图片描述

修改巡逻行为脚本

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改追击行为脚本

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

修改攻击行为脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

删除旧的动画控制代码

在这里插入图片描述

创建寻路点

在这里插入图片描述

在这里插入图片描述
配置每次待机时长
在这里插入图片描述
效果,可以看到人物移动有点滑动,这是因为导航和动画的冲突
在这里插入图片描述
通过修改动画播放速度,导航人物移动速度或者巡逻速度都可以解决这个问题
这里选择修改巡逻速度,每个模型都不一样,可能具体参数要自己去测试
在这里插入图片描述

修改代码,实时显示敌人各个状态的范围

在这里插入图片描述
效果
在这里插入图片描述

敌人攻击我们进行了裁剪

在这里插入图片描述
我们可以修改相机的裁剪平面为一个很小的值
在这里插入图片描述

效果
在这里插入图片描述

人物受击效果

在敌人手的位置添加一个攻击触发器范围
在这里插入图片描述

在这里插入图片描述

动态配置伤害值
在这里插入图片描述

在这里插入图片描述
修改玩家受伤脚本
在这里插入图片描述
配置参数
在这里插入图片描述
效果
在这里插入图片描述

添加血液效果

在这里插入图片描述
配置,留下A血液就行
在这里插入图片描述
修改参数
在这里插入图片描述
配制通用脚本,指定时间自动销毁物体
在这里插入图片描述
配置
在这里插入图片描述

调用喷血特效
在这里插入图片描述
在这里插入图片描述
效果
在这里插入图片描述

添加音效

音效包
在这里插入图片描述

在这里插入图片描述

调用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/433357.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue组件之间的通信方式都有哪些

Vue组件之间的通信方式 组件间通信的概念组件间通信解决了什么组件间通信的分类 父子组件之间的通信兄弟组件之间的通信祖孙与后代组件之间的通信非关系组件间之间的通信 组件间通信的方案 props传递数据$emit 触发自定义事件refEventBusparent、rootattrs与listenersprovide …

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 本篇文章是对已有一篇文章的整理归纳&#xff0c;并对文章中…

【详解】贪吃蛇游戏----上篇(介绍控制台和API等知识)

目录 知识点&#xff1a; Win32 API 宽字符的打印 控制台操作&#xff1a; &#xff08;1&#xff09;调整控制台大小 &#xff08;2&#xff09;控制台屏幕上的坐标COORD GetStdHandle GetConsoleCursorInfo CONSOLE_CURSOR_INFO SetConsoleCursorInfo SetConsoleC…

Tortoise-tts Better speech synthesis through scaling——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a79f6286-b48f-42be-8425-2b5d0880c648 【FlowUs 息流】tortoise 论文地址&#xff1a; Better speech synthesis through scaling Abstract: 自回归变换器和DDPM&#xff1a;自回归变换器&#xff08;autoregressive transfo…

RabbitMQ问题总结

:::info 使用场景 异步发送&#xff08;验证码、短信、邮件。。。&#xff09;MySQL 和 Redis、ES 之间的数据同步分布式事务削峰填谷… ::: 如何保证消息不丢失 上图是消息正常发送的一个过程&#xff0c;那在哪个环节中消息容易丢失&#xff1f;在哪一个环节都可能丢失 生…

C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔

目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1&#xff1a;用 DateAndTime.DateAdd方法 2.实例2&#xff1a;用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…

【STM32】STM32学习笔记-BKP备份寄存器和RTC实时时钟(42)

00. 目录 文章目录 00. 目录01. BKP简介02. BKP特性03. BKP基本结构04. RTC简介05. RTC主要特性06. RTC框图07. RTC基本结构08. 硬件电路09. RTC操作注意事项10. 附录 01. BKP简介 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备…

物联网IOT视频设备如何快速对接阿里云生活物联网(Link Visual)并成功上云?

原文永久更新地址&#xff1a;https://www.yundashi168.com/472.html 文章来源&#xff1a;猿视野 如果有图片看不清楚&#xff0c;加载不出来&#xff0c;请阅读原文。 什么是Link Visual、 Link Visual是生活物联网平台针对视频产品推出的增值服务&#xff0c;提供视频数据上…

操作系统(4)---虚拟机

虚拟机又叫虚拟机管理程序或者虚拟机监控程序&#xff08;Virtual Machine Monitor/Hypervisor&#xff0c;VMM&#xff09;&#xff0c;使用虚拟化技术&#xff0c;将一台物理机器虚拟化为多台虚拟机器 (Virtual Machine,VM)&#xff0c;每个虚拟机器都可以独立运行一个操作系…

2024 高级前端面试题之 CSS 「精选篇」

该内容主要整理关于 CSS 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 CSS模块精选篇 1. 盒模型2. BFC3. 层叠上下文4. 居中布局5. 选择器权重计算方式6. 清除浮动7. link 与 import 的区别8. CSS3的新特性9. CSS动画和过渡10. 有哪些…

跨境防诈指南 | 了解美国电商持续遭遇的“超额支付”欺诈

目录 常见的“超额支付”欺诈类型 假支票诈骗 虚假信用卡欺诈 基于交易的洗钱诈骗 防止“超额支付”欺诈 增强交易安全保障 加强异常交易识别 借助反欺诈技术识别 加强团队欺诈培训 美国商业委员会的统计报告显示&#xff0c;2023年年1至6月&#xff0c;联邦贸易委员会&#xf…

【小白教程】幻兽帕鲁服务器一键搭建 | 支持更新 | 自定义配置

幻兽帕鲁刚上线就百万在线人数&#xff0c;官方服务器的又经常不稳定&#xff0c;所以这里给大家带来最快捷的搭建教程&#xff0c;废话不多说直接开始。 步骤一&#xff1a;准备服务器 服务器建议 Linux 系统&#xff0c;资源占用低&#xff0c;而且一键脚本只需要一条命令&am…