《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
相关文章
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
AI编程助手对比
AI编程助手对比
|
1月前
|
人工智能 算法 搜索推荐
首个AI编程助手入职科技公司:探索与应用新技术
随着人工智能技术的不断进步和应用,AI编程助手作为其中的一项创新成果,正逐渐走进科技公司的开发环节。就在近日,通义灵码作为首个AI编程助手入职阿里云,为开发人员提供全流程的代码辅助服务。这一新技术的引入引发了广泛关注,这一新技术的引入,既带来了便利和效率的提升,也引发了人们对于人机协作、智能辅助的思考。因为传统的开发模式下,程序员们需要不断投入大量的时间和精力来编写、调试和优化代码,这使得大家在核心业务代码编写方面面临着时间压力,但是随着AI编程助手的加入,情况发生了很大变化。那么本文就来探讨如何看待首个AI编程助手入职科技公司,并分享个人对通义灵码的使用感受。
47 2
首个AI编程助手入职科技公司:探索与应用新技术
|
3月前
|
Web App开发 人工智能 自然语言处理
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
【人工智能时代】AI赋能编程 | 自动化工具助力高效办公
|
2月前
|
人工智能 自然语言处理 算法
国产新型AI编程助手—DevChat AI插件在VSCode中的应用
国产新型AI编程助手—DevChat AI插件在VSCode中的应用
101 0
|
18天前
|
人工智能 运维 自然语言处理
对话蚂蚁李建国:当前AI写代码相当于L2.5,实现L3后替代50%人类编程
超70%代码问题,单纯靠基座大模型是解决不了的;未来3-5年,人类50%编程工作可以被替代,有些环节甚至完全自动化。蚂蚁集团代码大模型CodeFuse负责人李建国说道。当下,AI代码生成领域正在野蛮式生长,巨头涌入,AI员工频频上线企业;首个AI程序员Devin被曝造假…… 面对风起云涌的代码生成变革,李建国给出了这样一个明确论断。
35 0
|
24天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
187 10
|
1月前
|
人工智能 算法 安全
AI编程发展预测:未来趋势与潜在变革
AI编程发展预测:未来趋势与潜在变革
37 4
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AI编程发展历史回顾:从孕育到普及的演进轨迹
AI编程发展历史回顾:从孕育到普及的演进轨迹
42 4
|
1月前
|
人工智能 自然语言处理 Cloud Native
通义灵码×西安交通大学携手打造“云工开物-高校训练营”,解锁 AI 时代编程学习与实战
阿里云与西安交通大学计算机学院携手打造的“云工开物-高校训练营”,带你走近 AI 编程助手“通义灵码”。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
通义灵码回答:如何看待首个 AI 编程助手入职科技公司?
通义灵码回答:如何看待首个 AI 编程助手入职科技公司?
27 1