教程: 为机器人设定路径
作者:吴波
描述:这个教程演示如何生成机器人或者AI控制的玩家,使他们可以在任务编辑器中沿着一定的路线活动。
这个功能非常的重要,可以通过这个功能让机器人可以在一定的范围内巡逻或守卫,当发现人类玩家的时候进行攻击。
注意:本教程所用的”bot.cs”文件中的编码是从”starter.fps”示例文件夹”aiPlayer.cs”中节选的,建议你从这个教程开始熟悉机器人(BOT)的一些控制语句。
1.开始之前,还是对"tutorial.base" 目录进行备份, 以防数据出错。
2.从素材路径中复制 "bot.cs" 文件到 "tutorial.base/server" 目录下。
3.打开"tutorial.base/server" 目录下的 "game.cs" 脚本文件并在onServerCreated() function语句下加入:
exec("./bot.cs");
你应该看到几句其他的exec()语句存在于此文件中,把上面的这句放到最后一行就可以了。
除了定义我们的机器人如何沿着给定的路径活动外, "bot.cs"脚本还定义了一个特殊的物体叫做AIManager(AI 管理器),它是用来管理所有的机器人的各种活动的,为了实现这个目的,我们需要在执行onMissionLoaded()(任务开始)和onMissionEnded()(任务结束)功能时,通过增加一些代码来开始和停止它的作用。
填加高亮部分语句到onMissionLoaded() function下:
function onMissionLoaded()
{
// Called by loadMission() once the mission is finished loading.
new ScriptObject(AIManager) {};
MissionCleanup.add(AIManager);
AIManager.think();
}
接下来,我们需要填加以下代码到onMissionEnded()功能下以便在游戏结束时删除AI管理器。
function onMissionEnded()
{
// Called by endMissio n(), right befo re the missio n is destroyed
AIManager.delete();
}
填加好以后,存盘关闭"game.cs" 脚本文件。
4.打开 "bot.cs" 文件仔细阅读所有的语句和功能块,以便你能理解机器人是如果按照任务编辑器中的指定路径活动的。
注意:到此我们还没有在任务编辑器中放置任何的路径,因此AIManager::spawn()功能只能产生一个普通的bot,它不能按照一个路径活动。
稍后,在我们增加并设置了路径后,我们将返回这个功能,来使用我们新设置的路径。
5.运行"example"目录下的"torqueDemo.exe"文件。
引擎报错?!!让我们来看看哪出问题了。
回到"example"目录下,打开"example"下的”console.log”文件,查看最后一行,应该可以看到”Loading compiled script tutorial.base/server/bot.cs.”语句,这说明是"bot.cs"出了问题。
6.再次打开"bot.cs"文件,看下第一行,datablock PlayerData( MyBot : PlayerShape ),发现问题了吗?PlayerShape是我们没有定义过的数据块,把它改成"PlayerBody",存盘。
7.再次执行"example"目录下的"torqueDemo.exe"文件,
8.主菜单出现后,点"开始"(或者"start",这取决于你是否已经汉化了按钮),"F World"任务将被调出。
9.任务开始后,向后移动几步,会看到一个不动的机器人出现了,这是因为我们还没给它设置活动的路径。
10.找到一个相对平坦的地形,这样将比较容易产生一个路径。
按F11进入任务编辑模式,再按F4进入"World Editor Creator"模式。
11.在右侧的编辑窗的下半部中,点击"Mission Object"左侧的"+",再点击"Mission"左侧的"+",实现 "Mission Objects->Mission"的路径展开。
在"Mission"目录下,找到"Path"并点击一次,产生一个新的路径,会调出一个对话框,在对话框"Object Name:"旁键入"myPath"(可键入任何名字,但本教程请按此名字输入,以保证教程能够顺利完成。
)
注意:我们新产生的路径体还没有任何的标记(PathMarkers),因此任务编辑器中不会有任何变化。
12.点击右侧窗口最上面的一行 "MissionGroup"展开树状目录,找到"Path - myPath",可以看到它的前面是一个"∞"符号,按住"Alt"并点击"Path - myPath",可以看到"∞"变成了绿色的文件夹图标,说明"Path - myPath"变成了一个文件夹(这步非常的重要!!),接下来我们要为路径(Path)建立标记点(Pathmarkers)。
13.重复刚才的步骤,在右侧的编辑窗的下半部中,点击"Mission Object"左侧
的"+",再点击"Mission"左侧的"+",实现 "Mission Objects->Mission"的路径展开。
在"Mission"目录下,找到"Pathmarker"并点击一次,产生一个新的标记点,会出现一个对话框,是否起名字都没有关系,点"OK"就可以了。
转动一下视角,再产生两至三个标记,使路径变成一个闭合的环。
调整一下标记点的位置,使相互之间的距离足够远,并位于地面之上。
确认一下所有的"Marker"都在"Path - myPath"下。
14.到此,我们就有了一个新的路径,保存任务并退出引擎。
15.现在我们再次进入"tutorial.base/server"目录下,打开"bot.cs"脚本文件。
找到AIManager::spawn()功能块,去掉屏蔽掉的关于"Bot_2"的语句:%bot = AIPlayer::spawnOnPath( "Bot_2", "MissionGroup/myPath" );
%bot.followPath( "MissionGroup/myPath", -1 );
做完以上步骤后,存盘。
16.再次运行引擎,看看你的任务中是不是有两个机器人了,一个站在原地,一个在沿着刚才设定好的路径快速的跑动。
17.好了,这个教程到此结束了。