纳金网

标题: 【Virtools中文手册】障碍物回避的处理 [打印本页]

作者: 驰骋的风    时间: 2013-1-8 14:04
标题: 【Virtools中文手册】障碍物回避的处理
这一Virtools中文手册课程里,我们将教您如何为您的角色附加上基本的障碍物回避功能,使用到的是「碰撞侦测行为模块」与「属性设定」。 在Virtools里要处理障碍物回避的方式,其中之一就是利用Virtools所提供的「碰撞总管」(Collision Manager),「碰撞总管」会自动替您计算所给定的3D对象间会产生碰撞与否,是个很方便的工具。 要达到这个效果,我们需赋予角色叫做Prevent Collision的「行为模块」。一旦激活,这个「行为模块」会询问「碰撞总管」相关的信息,以决定该角色会跟哪些3D对象产生碰撞行为。若有任何碰撞被侦测到,这个「行为模块」将会让角色稍稍后退,以避免直接撞击。 要执行碰撞侦测测试,您的「碰撞总管」得要有一张会发生碰撞的障碍物清单才行。我们必须指定出场景中会发生碰撞的3D对象,并将其列入障碍物清单里头。要这样做,我们得将这些对象一一挑出来,并且在个别对象上头贴上「障碍物」(obstacle)的属性。所谓的属性(Attributes),其实还是一些特定的参数,您可以将它们贴到场景里的个别组件上,用来给它们一些指定的特性。在这一课里,我们只会用到「障碍物」(obstacle)属性(可被碰撞侦测引擎所解读),其它还有许多不同的属性能够被贴在组件上头(像是角色的『生命值』、物体的『重量』等等),我们有机会再做介绍。
步骤1:将计算机设定为潜在障碍物属性(Declaring the computer as a potential obstacle using attributes.)
• 轻击Level Manager卷标。
• 从Global资料夹里打开3D Objects子资料夹。
• 从3D Layout工具列上点取Select tool图标。
• 从3D Layout view中点取计算机,以选择它。一个「外切框」(bounding box)会出现在3D Layout中,这表示该桌子已经成功地被选取了。计算机(New computer)同时也在Level Manager里以高亮度显示,就如一般被选取的组件一样。
• 在Level Manager里的New computer上按下滑属右键,并从选单里选取Add Attributes。
• 这个动作开启了Add Attribute对话盒。
• 「碰撞总管」Collision Manager上单击鼠标,以开启对应的属性目录。
• 选取Fixed Obstacle。
• 点取Add Selected。
• 点取Close。
您刚已经成功地将Fixed Obstacle的属性给附加在计算机上了。这台计算机目前已经被「碰撞侦测引擎」登录为一个潜在的障碍物了。
步骤2:应用Prevent Collision(Applying the Prevent Collision.)

• 在开始将该「行为模块」应用到角色上面之前,先按下status bar上的Play按钮,激活场景演出。
• 以方向键让角色在场景中四处游走一番,然后让角色停在书桌前面(注意不要让角色和书桌接触)。
• 再一次按下Play按钮,暂停演出的进行(注意不要按到Restore Initial Condition按钮,因为您只是想暂停,而不是想倒带!)。
• 选取Building Blocks。
• 开启Collisions资料夹。
• 开启3D Entity资料夹。
• 将「行为模块」PreventCollision拖曳到角色上。在重新测试场景之前,让我们从Schematic view里先检视一遍角色所有行为模块的script吧。
• 选取Schematic卷标以开始检视scripts。
• 使用垂直滚动条来检视角色的script。顺利的话,您将会看到下列的script。
• 在Schematic view里,您将可以很轻松且可视化地辨识所有script里的「行为模块」,只要轻轻地点选代表该「行为模块」的盒子就行了,甚至是要任意拖动它们都不是问题。
正如您所能看到的,「行为模块」PreventCollision并不像script里的其它两个「行为模块」般以亮灰色显示。这告诉您在您点取Restore Initial Condition算数的。
按钮之前,这个「行为模块」是还不

• 此时点取Play按钮,再次激活场景的演出,跳过「行为模块」PreventCollision的执行:您将会发现角色仍然无视于障碍物的存在,轻松地穿过面前的书桌,如入无人之境。
• 点取RestoreInitialCondition按钮。

• 「行为模块」PreventCollision现在就正式算数了(如下图里的Schematic view所示一般)。• 按下Play按钮,让场景再次激活。这一回角色就不再会穿过桌子,而是乖乖地停在桌前过不去了。 步骤3:为您角色的script来张快照!(Attach a snapshot to the character's script.)
如您所见,Schematic view显示了我们场景中所有组件上的scripts(在这个例子里,指的是角色与 camera)。为了让您的scripts能更便于阅读与日后检索,Virtools让您能为您所写的script加上一张从场景理撷取的快照插图。
• 从3D Layout工具列中点取SnapShot按钮。
• 这个动作开启了SnapShot窗口。
• 从SnapShot窗口里点选Capture按钮。
• 在3D Layout里任意移动鼠标调整视线,然后在满意时按下滑属左键。此时,您拍下了一张场景快照并出现在SnapShot里。
• 将这张快照从SnapShot里拖放到角色的script中,并将其放置在snapshot space里,如下图一般。 步骤4:为您的script加上批注(Add comments in the script)
• 在Schematic view里的角色script背景任意处按下鼠标右键,开启选单。
• 从选单里选取Add Comments。
• 这个动作在您的script里开启了一个批注栏,在里面,您可以任意地写下您对特定script所做的批注,也可以打上中文批注喔!
• 在刚刚所新增的批注栏上轻击鼠标左键以选择它。现在,它应该会变成灰色,且Comment字样应该会出现在Schematic view的工具列中。• 在Schematic view的工具列里Comment字样上双击鼠标左键,以编辑您所想下的脚注文本。
• 键入「This script contains the main behaviors for our character.」并按下Enter键。 步骤5:让角色能「脚踏实地」(Forcing the character to keep walking on the floor.)
在存盘之前,让我们先回顾一下刚刚学到的几个基本步骤。
您或许已经注意,在场景中您的角色并没有「脚踏实地」老老实实地站在地面上:您的角色居然漂浮在半空中,仿佛像有超能力一般。事实上,由于角色和实验室基本上是分别被创造出来的(甚至或许来自完全不同的3D modeling工具),因此,没有人告诉过您的角色说实验室里的某个3D对象代表「地面」。 要是我们想让角色真的能「脚踏实地」,我们就需要将场景中的特定3D对象宣告为「地面」才行(使用Floor属性),然后再「教导」您的角色如何把脚踏在地上(使用『行为模块』Character Keep On Floor)。在这个例子里,实验室里代表「地面」的3D object被我们命名为Floor Office。• 从Level Manager里开启3D Object资料夹。
• 在Level Manager里选取对象Ground01(或直接在3D Layout里以选取工具选择实验室的地板)。
• 在Level Manager里的selection上右击鼠标,并从选单里选择Add Attributes。
• 在Create Attribute对话盒里,开启Floor Manager数据夹,并选取Floor。• 点选Add Selected。
• 点选Close。
好了,现在我们已经将「地面」宣告完成了。
• 选取Building Blocks卷标。
• 开启Characters资料夹。
• 开启Constraint资料夹。
• 将「行为模式」Character Keep On Floor拖放到角色身上。
让我们再检视一次角色的script。
如您所见,有些「行为模块」盒子的左方拥有两个「输入端」(Character Controller, Keyboard Controller, PreventCollision)但Character Keep On Floor则只有一个。
举例来说,「行为模式」Keyboard Controller就有两个分别被称为「On」跟「Off」的「输入端」(在Schematic view里,将鼠标移动到这两个『输入端』上,就可以看它们的名称)在这个script里, On」与起始点连结,这意味着在场景激活的同时, 行为模式」Keyboard Controller
在整个场景演出里会持续地发生作用(使用Trace模式来做检查)。
而「行为模式」Character Keep On Floor就只有一个单一的「输入端」称为「In」。一旦被触发,这个「行为模式」变会在垂直方向上重新调整该角色的位置(以确保角色能站立在我们之前所宣告过的『地面』上),并且藉由它的「Out」输出端传送出一个讯号。因此,它只会被执行一次,就在场景刚开始被执行第一个Frame时。因为我们实在想让角色能持续地保持在地面上走动,所以我们就必须在每个Frame激活之前都要先执行这个贴地的指示,于是我们只要在它的「Out」输出端与「In」输入端间加上连结就可以了:
• 在Schematic view里选Link按钮制作一个循环(feedback link)。

• 按下Restore Initial Condition按钮。• 按下Play按钮。这时,您的角色已经可以精确且安稳地在地面上走动咯。 好啦,您现在可以将您的场景储存起来,然后用Virtools Player慢慢地欣赏喽。

作者: 驰骋的风    时间: 2013-1-9 15:14
总目录: 【Virtools中文手册】virtools简介、系统需求和接口操作【Virtools中文手册】创造第一个3D互动场景【Virtools中文手册】如何移动、控制与浏览Virtools里的对象【Virtools中文手册】制作一个追踪目标的摄影机【Virtools中文手册】障碍物回避的处理【Virtools中文手册】如何将「行为模块」组合成行为模块流程【Virtools中文手册】参考术语表  




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5