为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Virtools开发3D游戏

2012-12-29 35页 pdf 245KB 27阅读

用户头像

is_618397

暂无简介

举报
Virtools开发3D游戏 Virtools 开发 3D 游戏 一、制作一个追踪目标的摄影机 这一课将会教您如何在 Schematic view 里自由地组合「行为模块」,以便 在您的组件上加入进阶的「行为模块」的互动控制。在本课的例子里,我们将会 创造出一个会自动锁定角色头部的 camera,而当我们移动该角色时,该 camera 也会跟着角色在场景中四处移动,并保持动态的锁定状态。由于这是您第一次在 Schematic View 里以图像化方式撰写 Virtools 程序的经验,这是 Virtools 非 常核心与重要的部分,我们...
Virtools开发3D游戏
Virtools 开发 3D 游戏 一、制作一个追踪目标的摄影机 这一课将会教您如何在 Schematic view 里自由地组合「行为模块」,以便 在您的组件上加入进阶的「行为模块」的互动控制。在本课的例子里,我们将会 创造出一个会自动锁定角色头部的 camera,而当我们移动该角色时,该 camera 也会跟着角色在场景中四处移动,并保持动态的锁定状态。由于这是您第一次在 Schematic View 里以图像化方式撰写 Virtools 程序的经验,这是 Virtools 非 常核心与重要的部分,我们建议您最好一步一步地跟随课程的指示循序渐进,并 且仔细地看过所有的解释与说明,如此我们保证您将会事半功倍,马上进入状况。 这一课里包含了许多关于 Virtools 如何运作的重要概念基础,请用心学习哦! 步骤 1:新增一个镜头(Creating a new camera) · 在「3D Layout」工具列里点选「Create Camera」(新增镜头) 。此时,在 场景中会出现一个新的镜头,取代了原先的 Perspective View. 恭喜您,您刚刚创造了一个名为 New Camera 的新 camera。这个新的 camera 会出现在与原来所在 Perspective View camera(透视视角镜头)相同的位置上。 现在,一个新的面版将出现在 Level Manager 的右边:Camera Setup view。这 个面版让您能够检视与编辑所有关于这个 camera 的设定参数(包括位置、方向、 视线范围……等等)。这个新增的 camera 可以从几个地方呼叫出来:您能够从 Manager 里的 Camera 资料夹里开启;也可以在 3D Layout view 中的 Available Cameras 下拉选单里找到它。为了能在 3D Layout 里看见这个新的 camera,您将 需要切回先前窗口的状态(Perspective View) · 从「Available Cameras」(镜头类型)下拉选单里选取「Perspective View」 (透视视角)使镜头回复标准透视视角。 · 点选「Dolly Camera」(推移镜头)图标 ,这时候使用 Dolly camera(推 移镜头)向后移动一点点。 · 在 3D Layout 窗口中按下滑属左键,并慢慢地向 3D Layout 窗口下方拉动鼠 标,这时候,我们可以从比较远的距离观察我们的场景(相当于镜头拉离我们所 建构的)。这个动作让我们能够看到我们之前所创造出来的新 camera, 这个新 camera 目前以一个白色摄影机状的盒子来示。 · 按下 Orbit Camera 按钮以环视整个场景。如果没有意外的话,您将会看见 您所设定的 camera 跟它所锁定的目标,两者间透过一条黄色的线连结起来。 步骤 2:对镜头指定「行为模块」(Applying behaviors to the camera) 我们想要让 New Camera 达成的任务如下:首先,我们希望能够在一进入这 个场景的同时,就以 New Camera 来作为我们的观察视点(这件事情只要透过『行 为模块』SetAsActiveCamera 就可以达成了)。然后,我们想要使 New Camera 能够持续地锁定角色,再说清楚一点,也就是在 Virtools 开始算运算其它图形 资料之前,就先将镜头所定在角色上面(使用『行为模块』CameraOrbit)。 · 选取「Building Blocks」卷标。 · 打开「Cameras」资料夹。 · 打开「Montage」资料夹。 · 将「行为模块」「SetAsActiveCamera」拖放到指定的镜头上。 · 选取「Schematic」卷标,从 Schematic 可以检视摄影机互动模块的组合状态 (New Camera script)。 一个代表 SetAsActiveCamera 的方块出现,方块的左边有一个输入端(input), 而右边则有一输出端(output)。 · 从「Building Blocks」面版中打开「Cameras/Movement」资料夹。 · 将「行为模块」CameraOrbit 拖放到 Schematic view 里,摆在「行为模块」 SetAsActiveCamera 之右,如图所示。 · 在 Schematic view 里将鼠标移到 CameraOrbit「行为模块」方块上按下右键, 这时会出现一个选单,然后在选单里选择 Edit parameters。这个动作将会开启 一个对话框,这个对话框能让您指定该 camera 所要锁定的目标。 · 点选按键(Eyedropper button) ,并从 3D Layout 视角中选取角色 Scientist。 · 点取 OK。 步骤 3:设计一套「行为模块」(Designing a behavior flowchart.) 现在,我们的 New Camera 已经拥有两个「行为模块」了。注意:在 Virtools 里所有的「行为模式」实时处理与绘制,每执行一个 Frame(画格)都依循下列 的执行程序运作: - 处理「行为模块」 - 运算绘制场景 - 处理「行为模块」 - 运算绘制场景 - 依此类推 在 Virtools 中,一个基本处理周期(basic cycle)(包括一次的『行为模 块』处理与场景算图)被称为一个 Frame(画格)。举例来说,frame rate(画 格更新率)为 30 fps 代表了上述的基本处理周期在一秒钟里需要被连续执行 30 次。在这一课里,我们将会以 Frame 的概念来描述所有的「行为模块」是如何地 被连续组合起来的。 注意:Frame 这个字在 Virtools 也指在 3D 环境里被用来标示一个位置或是 有方向性的虚拟对象,小心别混淆了(其实在其它的软件里如 3DMAX,这样的对 象通常被叫做 Dummy)。 以下就是我们所希望在 camera 上所执行之「行为模块」的顺序: 1. 激活演出场景。 2. 切换到 New Camera(执行 SetAsActiveCamera)。 3. 运算绘制场景。 4. 让 New Camera 锁定在角色(执行 CameraOrbit)。 5. 运算绘制场景(Render the scene)。 6. 回到第 3步(以便在每一个新的Frame绘制之前都能重新执行CameraOrbit)。 步骤 4:观察所设定的「行为模块」如何运作(Understanding how behaviors basically work) 在学习如何创造「行为模块流程」之前,我们得花点时间搞清楚「行为模块」 是如何运作的。 基本上,所谓的「行为模块」就是一些执行程序中的组件,当其被触发激活时, 就会展开特定的作业与效果。这就是它们「输入端」(inputs)(位于每个『行 为模块』的左侧)的作用:「输入端」(inputs)接收以事件为基础的讯号 (event-based signals),并负责触发该「行为模块」激活之后一连串的处理 程序。 某些「行为模块」或许需要设定一些参数以执行它的工作。这些参数能够藉 由一群称为「参数输入插脚」(input parameter pins)的小点来输入与控制, 您可以在「行为模块」方块的上方找到这些「参数输入插脚」。 一旦某个「行为模块」完成它所负责的任务,它将会传送一些事件基础讯号 出去,透过位于盒子右方的「输出端」(outputs),然后接着触发连结到这些 「输出端」的其它「行为模块」,继续执行它们的任务。一个「行为模块」的执 行结果或许还会输出一些「计算参数」(computing parameters),而这些「计 算参数」则是透过盒子下方一些称为「参数输出插脚」(output parameter pins) 传送出去的。 步骤 5:在 Schematic view 里新增「行为模块流程」(Creating the behavior flowchart in the Schematic view) 现在,让我们试试看以一些基本的来建立属于自己的「行为模块」流程。 我们可以看到在最左边的箭头状的 Start 尖端与「行为模块」SetAsActiveCamera 之间的连结,这连结所代表的意义是:当您按下 Play 按键开始播放您的作品时, 「行为模块」SetAsActiveCamera 将第一个被触发激活。 一旦该「行为模块」的工作完成(切换到 New Camera),SetAsActiveCamera 将藉由它盒子上的「输出端」送出一个讯号。若是我们希望接下来要执行 CameraOrbit,我们得在 SetAsActiveCamera 的「输出端」与 CameraOrbit 的「输 入端」之间建立起连结才行。 · 点选 Schematic view 工具列中的 Link 选项。 · 在 SetAsActiveCamera 里选择 output。 · 在 CameraOrbit 里选择 input。 到这里,我们已经建立起下列的简单「行为模块」流程了: 1. 激活演出场景。 2. 执行 SetAsActiveCamera。 3. 运算绘制场景。 4. 执行 CameraOrbit。 注意我们刚刚所建立的连结上头显现的指示 0/0:这代表该连结所会延续 (delay)的时间。它告诉我们从 SetAsActiveCamera 的「输出端」传送到 CameraOrbit 的「输入端」需要花费 0 个 Frame 的时间。换句话说, SetAsActiveCamera与 CameraOrbit两个动作在以Frame为执行单位里已经被串 成一个执行程序。 · 按下状态区里的 Play 按钮,以激活演出场景。 如您所见,现在 New Camera 变成了 active camera(Virtools 以此 camera 为最起始的视点,算出整个场景),目前此 camera 正锁定在角色上。要是您使 用数字键盘上的方向键让该角色在场景里四处移动一下,您会发现 New Camera 并没有跟着角色而动。别担心,看看我们刚建立的流程:原因出在于我们只要求 该 camera 在开始演出场景时锁定角色一次而已。 · 按「Restore Initial Condition」(回复初始条件)按钮 停止演出。 · 按下状态区里的 Play 按键,再次激活演出场景。 正如您所看到的,现在 camera 再一次地对准了目标角色。当然啦,要是您 现在将角色移开的话,camera 是还不会跟着走的。 · 按「Restore Initial Condition」(回复初始条件)按钮 停止演出。 步骤 6:在「CameraOrbit」里加入一个循环(Creating a feedback loop on the behavior CameraOrbit) 要想让 camera 持续锁定追踪该角色,我们必须在每个 frame 运算前都执行 一次 CameraOrbit 才行。要达到这个效果,我们得在它的「输出端」和「输入端」 间建立起一道延续值为 1个 Frame 的连结。如此,「行为模块」CameraOrbit 将 会在每个新的 Frame 开始执行时,重复执行一次。 · 在 Schematic view 工具列里点选 Link 指令。 · 先在 CameraOrbit 里选择 output。 · 再将鼠标移向右边,并轻击一下以创造一个连结控制点(link control point)。 · 如下页所示般,轻击鼠标,继续创造另外两个连结控制点。 · 按下 CameraOrbit 的「输入端」。 · 按下 Restore Initial Condition 按钮以停止演出播放。 · 现在,按下 Status Bar 上的 Play 按钮,重新播放一次演出场景。 我们发现 camera 已经会追踪锁定移动中的角色了,因为「行为模块」 CameraOrbit 在每个 frame 绘制之前都会被重新执行一次。按下 Schematic 工具 列上的 Trace 按钮以激活 Trace 模式,并实时地观察执行中的「行为模块」:您 会看到以红色的高亮度显示着的「行为模块」CameraOrbit 正一次又一次不断地 执行着。 恭喜啦!您已经在Schematic view里创作了自己的第一个「行为模块」流程 了。在下一课中,我们将让您知道,当您能将Schematic view运用自如的时候, Virtools能够展示多么强大的威力!记得要储存您辛苦完成的作品哦,因为您将 会于下一课里在上头继续增添新的东西。只要用第 2 课里所学到的Virtools Player就可以随时观赏您的得意作品了! [NextPage] 二、障碍物回避的处理 这一课里,我们将教您如何为您的角色附加上基本的障碍物回避功能,使用 到的是「碰撞侦测行为模块」与「属性设定」。 在 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 characters 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 慢慢地欣 赏喽。 [NextPage] 三、如何将「行为模块」组合成行为模块流程 这一课里,我们的目标是建造一道当玩家用鼠标点选就能开关自如的门。由 于 Virtools 所提供的「行为模块」数据库里并没有这样的东西存在。因此,我 们必须将使用现存的「行为模块」在 Schematic view 里整合起来,组成一个「行 为模块」流程(或称为『行为模块图』),来达成我们所需要的功能。最后,我 们还可以将把这个流程命名为「Open」,如此一来,我们就能将这个建好的「行 为模块」流程 Open 应用在场景中其它的对象上,甚至于我们还可以把这个新的 「行为模块」流程储存在数据库里,把它当成一个新的「行为模块」以供未来使 用哦。首先,请重新加载您先前储存的作品。 以下就是我们需要为 Open 所编写的「行为模块流程」: 基于您在第3课与第4课里所学到的东西,您应该能够毫不费力地把这个「行 为模块流程」建立起来吧?!您将需要用到下列的三个「建构区块」: · Wait Message(在 Logics / Message 里) · Sequencer(在 Logics / Streaming 里) · Translate(在 3D Transformations/Basics 里) 要得到这些「行为模块」如何运作及怎么使用等信息,只要在该 Building Block 里该「行为模块」的名字上头双击鼠标左键即可。这个动作将会开启位于 Building Block 面版上方的「线上说明」Online Reference,里面就会出现关 于该「行为模块」的所有说明文件。举例来说,下一页所显示的,就是关于「行 为模块」Translate 的说明文件:我们建议您在使用「行为模块」前常常查询相 关的线上说明,这样对您的进步是很有帮助的。 步骤 1:新增「流程模块」(Creating the flowchart) 按照下列步骤: · 将「行为模块」Wait Message 拖放到实验室的大门上(如图)。 · 将「行为模块」Translate 拖放到 Schematic view 中门的 script 里,重复 两次。 · 将「行为模块」Sequencer 到 Schematic view 中门的 script 里。 · 您的 script 现在看起来应该像是这样: · 从 Wait Message 的 Out 输出端到 Sequencer 的 In 输入端作一个连结。 · 从 Sequencer 的 Out1 输出端到上方的 Translate 的 In 输入端作一个连结。 · 从 Sequencer 的 Out2 输出端到下方的 Translate 的 In 输入端作一个连结。 · 从 upper Translate 的 Out 输出端回 Wait Message 的 In 输入端作一个循环。 · 从 lower Translate 的 Out 输出端回 Wait Message 的 In 输入端作一个循环。 步骤 2:了解您的流程表(Understanding the flowchart) 现在,这流程是被连接起来了。让我们进一步解释一下倒底发生了甚么事情! 首先,Wait Message 先被执行了。这个「行为模式」基本上等待着从「门」收 到给定的讯息,而后藉由其「输出端」送出一个讯息(也因此触动了 Sequencer 的动作)。而等待输入的 Message 则是由「行为模块」Wait Message 的「参数 输入插脚」(input parameter pin)处进来的。 · 按住在 Wait Message 之「参数输入插脚」上方的小方块,并将其向上拖曳到 如图所示的位置,然后松开鼠标。这个小方块代表一个 local parameter(Wait Message 本身的参数设定钮),它是透过一道 parameter link(参数连结,以一 条虚线表示)传入「行为模块」Wait Message。 · 双击 local parameter。一个 local parameter 有一个名字(name),包含 了一个给定类型(type)(整数 integer、串行 string、向量 vector……等) 的值(value),并且会连结在一个 script 上头(在这个例子里,是连在『门』 的 script 上面)。 此例中,参数的名字叫做 Message,它的值为「On Click」。 · 在 local parameter 上按下鼠标右键,并从选单里选取 Edit Message。 · Edit Parameter 对话盒会显示出该参数的名字、类型、与值等资料。 · 点选 OK。 让我们来检视一下这个「行为模块流程」。首先,Wait Message 先被执行, 它正在等待 onClick 传来讯息。也就是,它正在等待使用者在「门」上按下他鼠 标的左键。 当使用者在门上按下鼠标左键时,Wait Message 会经由它的「输出端」送 出一个讯号并触动 Sequencer 的 In「输入端」。根据线上说明文件的描述,当 Sequencer 的输入端 In 被触动之后,Sequencer 会交替地由它的输出端 Out1 与 Out2 输出讯号。这意味着 Sequencer 首先将会经由它的 Out1 输出端送出一个讯 号,先触动上面的 Translate。然后,Translate 依照着它门板的轴线移动,把 门打开。最后,由它的「输出端」送出一个讯号,再一次触动 Wait Message, 等待新的 onClick 讯息。当使用者第二次按下门板时,「行为模块」Wait Message 会再次触动 Sequencer,而这一次将会触动下方的 Translate,Translate 门板 将因此而关上。 步骤 3:编辑相关参数(Editing local parameters) 现在,我们所要做的就是替两个「行为模块」Translate 设定适当的参数, 让上方的 Translate 专门负责开门,而下方的 Translate 则负责关门。 · 鼠标移至上方的 Translate 按下右键,从选单里选取 Edit Parameters。 · Edit parameters 对话盒是用来交代上方的 Translate 动作的三个参数 Translate Ventor (移动向量) Referential(依据对象)、和从属关系连动设 定 Hierarchy。您都可以在线上说明里找到关于这些项目的详细说明。 · 轻点 Translate Ventor 区,并将其值改为 x=-1.5。 · 点选 OK。 现在,上方的 Translate 将会沿世界坐标的 X 轴做一个-1.5 单位的移动, 将门打开。 · 鼠标移至下方的 Translate 按下右键,从选单里选取 Edit Parameters。 · 点取 Translate Ventor 区,并将其值改为 x=1.5。 · 点选 OK。 现在,lower Translate 将会沿世界坐标的 X轴做一个 1.5 单位的移动,将 门关闭(这个移动动作会完全与上一个相反)。 步骤 4:测试您的「流程模块」(Testing the flowchart) OK,现在您可以开始测试您所设计的流程了。 · 按下 Restore Initial Condition 按钮。 · 按下 Play 按钮。 · 轻点门板。你会看到「门」沿着 X轴打开了 1.5 单位。 · 再次轻点门板。「门」立刻关上。 · 在 Schematic view 的工具列里点取 Trace 按钮激活 trace 模式。 · 边玩玩您的「门」,边看看在 Schematic view 里的「行为模块」们是如何运 作的。 也是该到存盘的时候了,别忘了储存您的作品哦! 步骤 5:将「行为模块」流程封存成一个新的「行为模块」(Encapsulating the flowchart in a new behavior) 我们现在要教您的,算是Virtools里最有价值的技巧与最重要的特色之一, 将您自行建立的「行为模块流程」储存成为能重复利用的资产!在这一课里,我 们已经见识到Virtools在 3D场景里快速地建立个人化「行为模块」的能力了(以 『行为模块』构成『流程表』的可视化模式)。 在 Virtools 里,创造一扇能够旋转的门只要花几分钟而已,但想想,要是 您得重复这样的程序 200 次以制造 200 扇移动门,那不是累死人吗?!Virtools 提供了一些方法让您能够重新利用您所做过的模块组件,只要将您以「行为模块」 所完成的流程封装起来,成为一个新的「行为模块」就可以了。 ·在 Schematic view 里「门」的 script 背景处右击鼠标,选择 Draw Behavior Graph。 ·拖曳鼠标,框选起整个流程表:从左上方按下并拖曳鼠标光标,直到将整个盒 子框选完整。 ·最后再放开鼠标。 您刚刚藉由将整个流程表封装起来,成功地创造了一个新的「行为模块」。 这个新的「行为模块」系统暂命名为”开关门控制”,并且拥有一个单独的「输 入端」。如您所见,原本连接 Start 盒子与 Wait Message「输入端」间的连结 线已经不见了。您将需要重新连上它。 ·运用 Schematic view 工具列里的 Link 按钮,新增一个连接 Start 盒子与「行 为模块」”开关门控制”间的连结线。 ·新增另一条连结线连接”开关门控制”的「输入端」与 Wait Message 的「输 入端」。 ·在背景处双击鼠标以关闭它。现在,「行为模块」”开关门控制”已经成为一 个新的「行为模块」,等着您将其储存在您自己的数据库里了。 「行为模块」”开关门控制”具有一个「输入端」。您会看到有一个黑色的 小盒子在它的右端,代表其中包含了一个完整的流程表和许多「行为模块」在内, 要想检视里面的内容与结构,只要在上面双击鼠标左键就可以完全打开了。 步骤 6:从「行为模块」盒子中拉出有用的参数(Exposing meaningful parameters.) 「行为模块」”开关门控制”将能在使用者点选附加了该功能的 3D 对象时, 使其产生移动的动作。假定您要调整”开关门控制”的移动单位设定,您得先打 开「行为模块」”开关门控制”的代表盒子,然后才能进行必要的调整。现在, 我们教您一个法子能够不必经过这么麻烦的手续,就能简单地进行参数的调整动 作。双击「行为模块」”开关门控制”的背景处,显示出它的流程表。 选取上面 Translate 的上方左边数来第二个「参数输入插脚」(就是 Translate Ventor)。将它拖离「行为模块」”开关门控制”盒子,如下页图标。 选取该「参数输入插脚」…将它拖离「行为模块」盒子…然后放下它。现在, 我们将可以从「行为模块」”开关门控制”的外面来存取与修改 Translate 的 Translate Ventor 的参数了。 · 选取下面 Translate 的上方左边数来的第二个「参数输入插脚」(还是 Translate Ventor)。将它拖离「行为模块」”开关门控制”盒子。 · 在”开关门控制”背景处双击鼠标以关闭它。现在,「行为模块」”开关门 控制”已经有两个「参数输入插脚」,用来编辑与修改移动的单位值。 · 右击”开关门控制”,并从选单里选取 Edit parameter。 · 一个对话盒出现,让您能编辑两个移动单位参数。 · 点选 OK。 步骤 7:将新「行为模块」存入使用者数据库中(Saving the new behavior in a user library) · 从 Resources 下拉选单里选取 Create New Data Resource 选项。 ·在 Name 字段中键入「My Behaviors」。 ·按下 Save。 您刚在您的硬盘里建立了一个称为「My Behaviors」的资料夹。在这里,您 可以储存您自己所创造出来的「行为模块」。如果您注意看,一个叫做「My Behaviors.rsc」的档案出现在这个资料夹当中,这个档案里记载了这个新资料 夹里所有内容的描述在内。一个新的面版出现在 Building Block 面版的上方。 ·从 Schematic view 里点选「行为模块」”开关门控制”,并从按右键里选取 Save As。 ·您会看到一个 Save 对话框在画面上出现。这个「行为模块」将会被以 Open.nms 的文件名储存在 My Behaviors 资料夹当中。 · 按下 Save。 ·如下图所示般填妥 Behavior Information 资料。 ·按下 OK。 「行为模块」Open 已经被储存在属于您自己的「行为模块」资料夹当中了。 它将会出现在「My Behaviors」面版中。 步骤 8:呼叫并使用一个已经储存的「行为模块」(Reusing a saved behavior) 您可能猜到了,「行为模式」”开关门控制”现在能够被应用在场景里任何 的 3D 组件上头了(甚至您想将它储存起来应用在您未来的其它作品里都不是问 题)。放胆用这个「行为模式」做各种的尝试吧,将它自由地贴到场景里的任何 对象上头,并且试试调节与编辑其输入参数。举个例子: · 将「行为模块」open.nms 拖放到计算机(New Computer)上。 · 编辑移动的单位,将其分别设定为-2 与 2。 · 点取 OK。 · 按下 Restore Initial Condition 按钮。 · 按下 Play 按钮。 · 点选门(door)。接着门会沿着世界坐标的 X轴向左移动 1.5 单位开启。 · 点选门,将门关上。 · 点选计算机,您会看到计算机移动-2 单位。 · 点选计算机,您会看到计算机再次地移动,回到原来的位置。 [NextPage] 四、参考术语表 在第五课里,您应该已经完整地学习到了 Virtools 的基本使用方式。这一 课我们不再一步步地为您解说每样功能与特色,我们将以条列的方式为您针对一 些重要的观念或术语作比较详细的说明。在您逐步学习使用 Virtools 的过程中, 您将会对这些概念与术语感到越来越熟悉,也会对您日后运用 Virtools 创造属 于您自己的独特作品有很大的帮助。 在这一课里,我们把这些参考术语简单地分成三个大类: ·Virtools 里的组件 ·Virtools 的主要编辑器群 ·Virtools 的档案格式 VIRTOOLS 里的组件 Virtools 是由一系列预先已设定好的组件所构成的数据库。其中,每种组 件都具有一个相应的「Setup 面版」供您做进一步的设定动作。要开启组件的 「Setup 面版」很简单,只要在「Level Manager」当中选取要做设定的组件, 而后从鼠标右选单里选择「Setup」就可以了。每个 Virtools 里的组件都可以被 指定独立的「行为模块」与属性。 Media Media 组件包含了用来构成 Virtools 组件内容的各项素材(次组件)。它 们分别是 meshes(模型库)、materials(材质), textures(贴图)、与 sounds (音效)等。每一种素材在 Virtools 里均是以一种组件(entity)的形式存在: mesh、material、texture、与 sound。这些素材组件都能够在 Level View 被轻 易地存取,而且每一个都能拥有独立的控制与设定方式(详见后面的例子)。 3D Entities 每一个 Virtools 里的 3D 组件都以 3D 几何组件的形式存在,换句话说,它 们都在 3度空间坐标里具有位置、方向、与大小等几何性质(相对于非几何组件 与 2D 图形组件而言)。这也就是说,一个 3D 组件必须包含以下的属性: ·在 3度空间坐标里具有一笔其位置、方向、与大小的独立资料(以数学数 组 matrix 的形式储存)。 ·一组可调整的特性参数(内容视其类型而定)。 · 一组被指定在组件上的 media 资料(内容视其类型而定)。 这些各种不同类型的 3D 组件包括有:Frames、3D Objects、Characters、 Cameras、Lights、3D Sprites、和 Curves。 Frame Frame 是最简单的 3D 对象,它所有的资料(在 3 度空间里的位置、方向、 和大小)包含在一组数学数组(matrix)当中,他的功用就如同在 3DSMAX 里的 Dummy 虚拟对象,也就是最常被使用于在 3D 环境里标明一个特定的位置与或方 向,本身在执行时并不会被实际描述出来。点选 3D Layout 工具列里的「Create Frame」图标来创造 Frames。 3D Object 一个3D对象包含一组用来标明位置、方向、与大小的资料,与一系列的mesh。 若是一个 3D 对象具有数个 mesh,这些 mesh 在同一时间里面只有一个会是有效 的(active),而这个 mesh 就被称为「current mesh」。一个拥有好几个不同 mesh 的 3D Object 对象有甚么好处呢?您将可以藉由切换选择不同的 mesh 而让 这个 3D 对象展现完全不同的风貌,或呈现出一些特别的效果。举例来说,一个 用来表示「汽车」的 3D 模型可以分别拥有两套完全不同的 mesh,假设第一套为 「新车涂装」,而另一套为「损毁涂装」。在一开始时,我们可以把「current mesh」 设定为「新车涂装」,这使得车子看起来跟新的一样;随后,我们若是想让车子 看起来像是受到毁损一般,不必改变模型对象,而只需将 mesh 切换为第二组「损 毁涂装」就可以了。要注意的是,因为「行为模块」能够直接被指定到 mesh 上 头产生作用(变形或活动等),在数个 3D 对象共享同一套 mesh 的情况下,在使 用上可能要多留心点。举个例子,您能够使四部独立的车子拥有同样的一套「涂 装」,也就是共享同一套 mesh。在这同时,您对于这套 mesh 所指定的「行为模 块」,也将会同时对这四部车子发生影响。 Character 一个典型的角色是由一组「躯体零件」(body parts)的 3D 组件所构成的。 每一个「躯体零件」都能够被指定独立的「行为模块」。 Character 能够把一 组不同的 3D 组件组在一起,表现整体的效果,让这个 Character 做出不同的动 作,或对这个整个 Character 做碰撞侦测。 Camera 一个 Camera 包含了一个数学数组的基本数据(位置、方向、和大小)与一 组特别的控制参数(视野、裁切面…等)。在您的作品里设定几组不同的 camera 组,能够让您视情况在这几组 camera 间做交互式的实时切换。这将使您的作品 表现出电影般的蒙太奇动态效果。Cameras 可以是自由移动的,也可以被锁定在 某个目标 3D 组件上,成为该组件专属的追踪镜头,端看您的需求而定。 要新增一组 camera,只要从 3D Layout 的工具列里选取「Create Camera」图标 就可以了。 Light 一个 Light 包含了一个数学数组的基本数据(位置、方向、和大小)与一组 特别的控制参数(色彩、强度…等)。我们可以使用 Light 来创造场景理的即时 光源效果。Light 的种类共有下列四种: · 点光源(Point):全方向光源(omni-directional light) · 聚光灯(Spot):直接打在一个聚光目标(3D 组件)上的聚光灯。 · 有向光源(Directional):朝给定方向直射的光源。 · 平行光源(Parallel):与点光源相似,平行光原也对场景中所有的对象产 生作用,但平行光源在每个对象上只会计算单一向量的一道平行光线。(相对地, 点光源会对对象上的每一个顶点 vertex 做光线向量运算,这样的方式会产生相 对精确真实的光源效果,但同时也要花费较多的运算时间。) 要新增一个 Light,只要从 3D Layout 的工具列里选取「Create Light」图标就 可以了。 3D Sprite 一个 3D Sprite 包含了一个数学数组的基本数据(位置、方向、和大小)、 一张贴图(texture)、与一组特别的控制参数(Sprite 种类、UV 映像资料…等)。 贴图在这里就好比一张被贴在 3D 对象上的动画片一般,所不同的是它的演出面 将不再仅仅是平面,而已经被换成有 3度空间位置的图形了。 要新增一个 3D Sprite,按住 Shift 后从 Resource 面版中的数据库里拖曳想要 的贴图,并将它放入 3D Layout 里适当的位置上就行了。 Curve 一个 Curve 包含了一个数学数组的基本数据(位置、方向、和大小)、一组 3D 控制点、与一组特别的控制参数(Curve 种类、相位资料 aspect…等)。 要新增一个 Curve,只要从 3D Layout 的工具列里选取「Create Curve」图标就 可以了。 2D Entities 一个 3D 组件包含以下的属性: · 在 2 度空间里具有位置与大小的数据。 · 一组可调整的特性参数(内容视其类型而定)。 · 一组被指定在组件上的 media 资料(内容视其类型而定)。 在 Virtools 中唯一可被存取与使用的 2D 组件只有 2D Sprite。(Virtools 引擎 也将文字视为 2D 组件,但它们的性质与 Virtools 接口上的文字其实是不太一样 的。) 2D Sprite 一个 2D Spr
/
本文档为【Virtools开发3D游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索