《Unity 3D人工智能编程》——2.5 敌方坦克的人工智能

简介:

本节书摘来自华章出版社《Unity 3D人工智能编程》一 书中的第2章,第2.5节,作者:(美)基奥(Kyaw,A.S.),(美)彼得斯(Peters,C.),(美)斯瑞(Swe,T.N.),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 敌方坦克的人工智能

现在来看一下敌方坦克的人工智能的代码。把我们的类称为SimpleFSM,这个类继承自我们的有限状态机抽象类。
SimpleFSM.cs 文件中的代码如下所示:

8a3837da028b7259e94d120bc820676e4b099310

在这里我们声明了几个新的变量。敌方坦克的人工智能将会有4个不同的状态:巡逻、追逐、攻击和死亡。大体上,我们将实现的有限状态机是第1章中所描述的例子。

6fb843d5d0670435760da1a996f7183ddba1d65e

敌方坦克人工智能的有限状态机
在初始化方法中,我们建立了敌方人工智能坦克的属性默认值。然后,我们在局部变量中存储了航点的位置。我们通过FindGameObjectsWithTag方法,试着找到这些具有WandarPoint标签的对象,最终得到场景中的这些航点。

5af76493bf35c64a4e149f7aafa9db04aaad952b 6c811e412da3a525e9bcc6bb0c9680fd7e6e93e6

在每一帧中都会被调用的update方法如下所示:

我们检查当前状态,然后调用相应的状态方法。一旦发现对象的生命值为0或小于0时,我们就会把坦克状态设为死亡。

2.5.1 巡逻状态

当我们的坦克在巡逻状态时,我们会检查它是否已达到目标点。如果是,它就会寻找下一个要跟随的目标点。FindNextPoint方法主要是从所定义的航点中选择下一个随机目标点。如果它在向当前目标点前进的路上,它会检查与玩家坦克的距离。如果与玩家坦克的距离在一定范围内(在这里是300),它就会更改为追逐状态。代码的其余部分只实现旋转和向前移动坦克。

22544aaa2635d8d916492da4dcfd62eb9b6fecb8 efb6458604672ab98c70615b95b1bd220b25695b 4c2f3c8d1494c7e21b4056eafd4ac799f12933e0

2.5.2 追逐状态

同样,当坦克处于追逐状态时,它会检查自己与玩家坦克的距离。如果距离足够近,那么它就会切换到攻击状态。如果玩家坦克已经跑得太远了,那么它就会切回巡逻状态。

3125ca8613e9527d1ec43f4ddfaddfeb61cb12ec

2.5.3 攻击状态

如果玩家坦克足够接近攻击敌方人工智能坦克,那么敌方坦克就会向玩家坦克旋转炮塔,然后开始射击。如果玩家坦克超出范围,那么它会切回巡逻状态。

cdb305603cb93503988a4f9970fc29f7fc3f5f83 bbcf949d6d9e6baaaefc0f007ac807e2da5b4b9f

2.5.4 死亡状态

如果坦克到达死亡状态,那么我们将会让它爆炸。

0f29e291261b314218e9676f0bbd8ad7bc211279

这是一个很小但却能够给出一个漂亮爆炸效果的函数。我们只需应用一个ExplosionForce到我们的刚体组件,并增加一些随机的方向即可,其代码如下:

4d22d169abfecedbd79047cc14114513502fa8b5

进行伤害
如果我们的坦克被一颗子弹击中,它的生命值属性将会基于子弹对象的伤害值相应地减少。

00b753d70382cca28a9888e98dd0072ded3a37c1

在Unity中打开SimpleFSM.scene,就可以看到人工智能坦克巡逻、追逐和进攻玩家。我们的玩家坦克不会受到人工智能坦克的伤害,所以它永远不会被摧毁。但是人工智能坦克有生命值,并承担由玩家的子弹造成的损害。所以,一旦它们的生命值属性值变成零,你就会看到它们爆炸。

0fff555ad0ad0cd3b9338bcd02fb755ea0da7199
相关文章
|
人工智能 数据可视化 定位技术
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
不会编程也能体验的 AI 魔法,外滩大会代码原生地等你解锁
769 39
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
383 3
|
人工智能 运维 监控
让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动
本次大赛由阿里云主办,云原生应用平台承办,聚焦 Operation Intelligence 的智能运维(AIOps)赛道,为热爱 AI 技术的开发者提供发挥创意和想象力的舞台,借助 LLM 强大的推理能力与标准化整合的多源可观测数据,找到 AI 应用在智能运维(AIOps)场景上的新方式。
1171 31
|
人工智能 自然语言处理 搜索推荐
AI Compass前沿速览:Qoder Agentic编程、vivo Vision头显、AIRI桌面伴侣、RM-Gallery奖励模型平台
AI Compass前沿速览:Qoder Agentic编程、vivo Vision头显、AIRI桌面伴侣、RM-Gallery奖励模型平台
AI Compass前沿速览:Qoder Agentic编程、vivo Vision头显、AIRI桌面伴侣、RM-Gallery奖励模型平台
|
人工智能 算法 小程序
再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
真心建议大家去使用一下这段时间最新推出的一款 AI 编程工具:Qoder 。真的是太好用了,一点也不比 Cursor 差。
1946 10
|
存储 人工智能 JSON
揭秘 Claude Code:AI 编程入门、原理和实现,以及免费替代 iFlow CLI
本文面向对 AI Coding 感兴趣的朋友介绍 Claude Code。通过此次分享,可以让没有体验过的快速体验,体验过的稍微理解其原理,以便后续更好地使用。
3865 18
揭秘 Claude Code:AI 编程入门、原理和实现,以及免费替代 iFlow CLI
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
414 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
884 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
存储 消息中间件 人工智能
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
【04】AI辅助编程完整的安卓二次商业实战-寻找修改替换新UI首页图标-菜单图标-消息列表图标-优雅草伊凡
745 4
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
337 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡