《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
相关文章
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
17天前
|
人工智能 vr&ar
GeneMAN:上海AI Lab联合北大等高校推出的3D人体模型创建框架
GeneMAN是由上海AI实验室、北京大学、南洋理工大学和上海交通大学联合推出的3D人体模型创建框架。该框架能够从单张图片中生成高保真度的3D人体模型,适用于多种应用场景,如虚拟试衣、游戏和娱乐、增强现实和虚拟现实等。
47 7
GeneMAN:上海AI Lab联合北大等高校推出的3D人体模型创建框架
|
1天前
|
人工智能 测试技术 开发者
AI 编码助手:编程路上的得力伙伴
在数字化浪潮中,AI编码助手成为开发者不可或缺的工具。它通过代码生成与补全、优化与规范、错误检测与调试等功能,大幅提升编程效率和代码质量。从需求分析到部署,AI助手全程助力,确保项目顺利进行。尽管不能替代开发者创造力,但它无疑是编程道路上的得力伙伴,推动软件开发不断创新。
26 12
|
29天前
|
人工智能 安全 JavaScript
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
Open Interpreter 是一个让语言模型运行代码的强大工具,提供了一个类似 ChatGPT 的界面,支持多种编程语言和丰富的功能。
83 7
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
|
17天前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
36 12
|
15天前
|
人工智能
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
带上团队一起来做 AI 编程实践丨通义灵码联合TGO鲲鹏会开启 AI 大课
|
19天前
|
人工智能 并行计算 调度
【AI系统】CUDA 编程模式
本文介绍了英伟达GPU的CUDA编程模型及其SIMT执行模式,对比了SIMD和SIMT的特点,阐述了SIMT如何提高并行计算效率和编程灵活性。同时简要提及了AMD的GPU架构及编程模型,包括最新的MI300X和ROCm平台。
48 5
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
1月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
51 4
|
1月前
|
人工智能 自然语言处理 IDE
通义灵码让AI帮你实现自动化编程
通义灵码是由阿里云与通义实验室联合开发的智能编码辅助工具,具备行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答及异常报错排查等功能。该工具支持200多种编程语言,兼容主流IDE,如Visual Studio Code、Visual Studio和JetBrains IDEs。通义灵码在Gartner发布的AI代码助手魔力象限中表现出色,成为唯一进入挑战者象限的中国科技公司。目前,通义灵码下载量已超过470万,每日辅助生成代码超3000万次,被开发者广泛采用。
下一篇
DataWorks