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

2.5 敌方坦克的人工智能

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

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

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

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

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

2.5.1 巡逻状态

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

2.5.2 追逐状态

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

2.5.3 攻击状态

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

2.5.4 死亡状态

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

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

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

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

时间: 2024-10-17 09:33:56

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

《Unity 3D人工智能编程》——导读

前 言 本书旨在帮助你把各种人工智能技术应用到你的游戏中.我们将会讨论决策技术,比如有限状态机和行为树:也将探讨运动.避开障碍和群组行为:还将演示如何跟随一条路径,如何使用A*寻路算法来创建一条路径,以及如何使用导航网格到达目的地.作为额外收获,你将详细了解随机性和概率,并把这些概念应用到最后一个综合项目中. 本书内容 第1章讨论什么是人工智能,如何将其应用到游戏中,以及游戏中使用的各种实现人工智能的技术. 第2章讨论人工智能中需要用到的一种简化决策管理的方法.我们使用有限状态机来确定人工智能在

《Unity 3D人工智能编程》——1.3 人工智能技术

1.3 人工智能技术 在本节中,我们将简单了解部分人工智能技术在不同类型的游戏中的应用.在后面的章节中,我们将学习如何在Unity中实现这些功能.由于这本书不是专注于人工智能技术本身,而是这些技术的在Unity中的应用,所以在这里我们不会深究过多的细节.就让我们把它当作一个速成班,然后再开始研究这些应用.如果你想了解关于游戏人工智能的更多内容,也有一些非常棒的书值得推荐,如由Mat Buckland 所著的<Programming Game AI by Example>.由Ian Millin

《Unity 3D人工智能编程》——第2章 有限状态机

第2章 有限状态机在本章中,我们将以一个简易的坦克游戏为例,学习如何在一个Unity3D游戏中使用有限状态机.我们将详细解析这个游戏项目中的代码和组件.在这个游戏中,玩家能够控制一辆坦克,敌方坦克会参照场景中的4个航点走动.一旦玩家坦克进入它们的可视范围内,它们将开始追逐玩家的坦克.而一旦它们与我们的距离足够接近可以攻击,它们就会向玩家的坦克开火.这够简单了吧?我们将通过实现有限状态机来控制敌方坦克人工智能的状态.首先,我们将用简单的switch语句来实现我们的坦克人工智能的状态,然后使用有限状

《Unity 3D人工智能编程》——2.3 设置航点

2.4 抽象有限状态机类 接下来,我们将实现一个通用抽象类,它定义了一个敌方坦克人工智能类必须实现的方法.FSM.cs文件中的代码如下所示: 敌方坦克在巡逻时,需要知道玩家坦克的位置.它们的下一个目标点,以及它们需要选择的航点列表.一旦玩家坦克出现在射击范围内,它们将旋转炮塔对象,然后开始以一定的射击速度射击.继承类还需要实现三个方法:Initialize.FSMUpdate和FSMFixedUpdate.所以,这就是我们的坦克人工智能将要实现的抽象类.

《Unity 3D人工智能编程》——1.1 人工智能

1.1 人工智能 一些类似于人类和其他动物的生命体具有某种智能,这种智能有助于我们在完成一件事时做出特定的选择.然而计算机只是台可以接收数据的电子设备,它以很高的速度执行逻辑和数学运算并输出结果.所以人工智能(AI)的主旨本质上是让计算机能够像生物体一样,具有思考和决定的能力来执行某些特定操作.显而易见,人工智能是一个巨大的课题.而这样一本小书并没有办法涵盖所有与人工智能有关的内容.但是了解人工智能在不同领域中的基础知识是非常重要的.人工智能只是一个总称,对于不同的目的,它的实现和应用是不同的

《Unity 3.x游戏开发实例》——1.5节欢迎来到Unity 3D

1.5 欢迎来到Unity 3D 安装好网络播放器后,就可以在浏览器中查看通过Unity 3D制作工具创建的内容了. 1.5.1 可以用Unity制作什么呢 为了能充分体会Unity的神奇,我们先来看其他人用Unity制作的一些项目.虽然我们目前还达不到这种境界,但可以先看一下游戏开发者是如何将这个神奇的工具发挥到极致的. <FusionFall> Unity之旅的第一站是<FusionFall>--一款大型多人在线角色扮演游戏(Massively Multiplayer Onli

《Unity 3.x游戏开发实例》一1.5 欢迎来到Unity 3D

1.5 欢迎来到Unity 3D 安装好网络播放器后,就可以在浏览器中查看通过Unity 3D制作工具创建的内容了. 1.5.1 可以用Unity制作什么呢 为了能充分体会Unity的神奇,我们先来看其他人用Unity制作的一些项目.虽然我们目前还达不到这种境界,但可以先看一下游戏开发者是如何将这个神奇的工具发挥到极致的. <FusionFall>Unity之旅的第一站是<FusionFall>--一款大型多人在线角色扮演游戏(Massively Multiplayer Onlin

《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

1.1 Unity 3D基础知识概览 Unity 3D 游戏开发技术详解与典型案例 本节主要向读者介绍Unity 3D的相关知识,主要内容包括Unity 3D的简介.Unity 3D的发展和Unity 3D的特点等.通过本节的学习,读者将对Unity 3D有一个基本的认识. 1.1.1 初识Unity 3D Unity 3D是由Unity Technologies开发的一个轻松创建三维视频游戏.建筑可视化.实时三维动画等互动内容的.多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎. Un

ios-使用Unity 3D在IOS及安卓平台上实现消息推送

问题描述 使用Unity 3D在IOS及安卓平台上实现消息推送 要求如标题,使用Unity 3D在不打开应用程序的情况下,可以实现消息推送. 请告知实现逻辑和关键的代码,如果有调用API接口,请描述API接口的名称及调用参数. PS.不是程序员,代人提问,描述不清楚的地方请提出勿喷,我会询问后补充. PSS.公司急求,解决问题实现功能的可以提供赏金.可以网上搜索悬赏任务(详细就不说了省的被删),也可以通过站内消息沟通联系.