《Unity 3D人工智能编程》——2.1 玩家的坦克

2.1 玩家的坦克

在为玩家的坦克编写脚本之前,我们先看看如何设置PlayerTank游戏对象。我们的坦克对象基本上是一个带有刚体组件和盒碰撞器组件的简单网格(Mesh)。坦克对象不是一个单独的网格,而是由坦克和炮塔两个网格组成。为了允许炮塔对象根据鼠标运动独立转动,我们将炮塔设为坦克的子对象。同时,因为它是坦克的子对象,所以无论坦克去哪,它都会一直跟随坦克。然后创建一个空游戏对象作为SpawnPoint转换。当我们射出一颗子弹时,这将会作为一个位置参照点。我们还需要给坦克对象赋一个Player标签。以上就是坦克实体的设置方法。接下来将学习控制器类。

坦克实体

2.1.1  PlayerTankController类

这个类将成为玩家控制坦克对象的主要手段。我们将使用W、A、S和D键移动与操纵坦克,用鼠标左键瞄准与射击炮塔对象。
Unity只知道如何在标准QWERTY键盘布局下工作。对于我们这些使用不同类型键盘的玩家,所要做的就是模拟使用QWERTY键盘的情况,然后一切问题迎刃而解。本书默认使用QWERTY键盘和鼠标左键为主按键的两键鼠标。

2.1.2 初始化

我们的TankController类的属性如下。首先,建立Start函数和Update函数。
PlayerTankController.cs 文件如下所示:

坦克实体的第一个子对象是炮塔对象,炮塔对象的第一个子对象是bullet-SpawnPoint。Start函数找到这些对象,然后将它们赋值到各自对应的变量。在我们创造子弹对象之后,就赋值子弹变量。同时我们还会包含Update函数,并在其中调用即将创建的UpdateControl函数和UpdateWeapon函数。

  1. 射击子弹
    每当玩家点击鼠标左键时,我们都会检查自上次射击到现在过去的时间是否超过了武器的射击速率。如果是,那么在SpawnPoint变量的位置创建一个新的Bullet对象。通过这种方法,我们可以避免没有任何限制的连续射击行为。
  2. 控制坦克
    游戏中玩家要使用鼠标控制炮塔(Turret)对象的旋转,这个部分有点棘手。我们的摄像机(Camera)将会俯视战场。随后,我们将基于mousePosition对象在战场上的位置,使用光线投射的方法来确定要转动的方向。

通过光线投射来使鼠标瞄准
它的工作流程如下:
1)设置一个平面,与玩家的坦克相交于一个向上的法线。
2)在屏幕空间中以鼠标位置发射一条射线(在上图中假设我们俯视着坦克)。
3)找到这条射线与平面的交叉点。
4)最后,找到从当前位置到该交点所要旋转的角度。
然后检查按键输入,并据此相应地移动或旋转坦克。

时间: 2024-10-17 09:34:16

《Unity 3D人工智能编程》——2.1 玩家的坦克的相关文章

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

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

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

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

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

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

《Unity 3D人工智能编程》——1.4 本章小结

1.4 本章小结 游戏领域的人工智能和学术领域的人工智能的目标是不同的.学术领域的人工智能尝试解决真实世界中的问题,并需要在不消耗过多有限资源的情况下证明某个理论.游戏领域的人工智能致力于在资源有限的条件下,构建对于玩家来说看上去很智能的NPC.游戏人工智能的目标是提供一个有挑战性的对手,让游戏玩起来更加有趣.我们也大概了解了应用在游戏中的不同的人工智能技术,比如有限状态机(FSM).随机性和概率.感应器和输入系统.群组行为.路径跟随和行为引导.人工智能寻找路径.导航网格的生成.行为树.在接下来

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

2.5 敌方坦克的人工智能 现在来看一下敌方坦克的人工智能的代码.把我们的类称为SimpleFSM,这个类继承自我们的有限状态机抽象类.SimpleFSM.cs 文件中的代码如下所示: 在这里我们声明了几个新的变量.敌方坦克的人工智能将会有4个不同的状态:巡逻.追逐.攻击和死亡.大体上,我们将实现的有限状态机是第1章中所描述的例子. 敌方坦克人工智能的有限状态机在初始化方法中,我们建立了敌方人工智能坦克的属性默认值.然后,我们在局部变量中存储了航点的位置.我们通过FindGameObjectsW

《Unity 3D人工智能编程》——1.2 游戏中的人工智能

1.2 游戏中的人工智能 游戏人工智能需要去完善一个游戏的品质.为此,我们需要了解每个游戏必须满足的基本需求.答案应该是显而易见的,就是让游戏好玩.那么,是什么决定了一个游戏是否好玩呢?这其实是游戏设计的主旨(Jesse Schell所著的<The Art of Game Design>是一份极佳的参考资料),让我们试着在不深入讨论游戏设计的话题的情况下来解决这个问题.你会发现一个具有挑战性的游戏一定是好玩的.重申一遍:让游戏具有挑战性.这意味着一个游戏不应该太过困难让玩家没有击败对手的可能性

《Unity 3D人工智能编程》——第1章 人工智能导论

第1章 人工智能导论 本章将会在学术领域.传统领域以及游戏的具体应用上给你提供一些人工智能的背景知识.我们将会学习人工智能在游戏中的实现和应用与其他领域中的人工智能的不同,以及游戏人工智能的一些重要且特殊的需求,还将探索在游戏中应用人工智能的基本技术.本章也将作为后面章节的参考.在后面的章节中,我们将会在Unity中实现这些人工智能技术.

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

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

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

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