Virtools 开发3D游戏.docx

上传人:b****7 文档编号:11196902 上传时间:2023-02-25 格式:DOCX 页数:58 大小:40.71KB
下载 相关 举报
Virtools 开发3D游戏.docx_第1页
第1页 / 共58页
Virtools 开发3D游戏.docx_第2页
第2页 / 共58页
Virtools 开发3D游戏.docx_第3页
第3页 / 共58页
Virtools 开发3D游戏.docx_第4页
第4页 / 共58页
Virtools 开发3D游戏.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

Virtools 开发3D游戏.docx

《Virtools 开发3D游戏.docx》由会员分享,可在线阅读,更多相关《Virtools 开发3D游戏.docx(58页珍藏版)》请在冰豆网上搜索。

Virtools 开发3D游戏.docx

Virtools开发3D游戏

Virtools开发3D游戏

一、制作一个追踪目标的摄影机

  这一课将会教您如何在Schematicview里自由地组合「行为模块」,以便在您的组件上加入进阶的「行为模块」的互动控制。

在本课的例子里,我们将会创造出一个会自动锁定角色头部的camera,而当我们移动该角色时,该camera也会跟着角色在场景中四处移动,并保持动态的锁定状态。

由于这是您第一次在SchematicView里以图像化方式撰写Virtools程序的经验,这是Virtools非常核心与重要的部分,我们建议您最好一步一步地跟随课程的指示循序渐进,并且仔细地看过所有的解释与说明,如此我们保证您将会事半功倍,马上进入状况。

这一课里包含了许多关于Virtools如何运作的重要概念基础,请用心学习哦!

步骤1:

新增一个镜头(Creatinganewcamera)

·在「3DLayout」工具列里点选「CreateCamera」(新增镜头)。

此时,在场景中会出现一个新的镜头,取代了原先的PerspectiveView.

  恭喜您,您刚刚创造了一个名为NewCamera的新camera。

这个新的camera会出现在与原来所在PerspectiveViewcamera(透视视角镜头)相同的位置上。

现在,一个新的面版将出现在LevelManager的右边:

CameraSetupview。

这个面版让您能够检视与编辑所有关于这个camera的设定参数(包括位置、方向、视线范围……等等)。

这个新增的camera可以从几个地方呼叫出来:

您能够从Manager里的Camera资料夹里开启;也可以在3DLayoutview中的AvailableCameras下拉选单里找到它。

为了能在3DLayout里看见这个新的camera,您将需要切回先前窗口的状态(PerspectiveView)

·从「AvailableCameras」(镜头类型)下拉选单里选取「PerspectiveView」(透视视角)使镜头回复标准透视视角。

·点选「DollyCamera」(推移镜头)图标,这时候使用Dollycamera(推移镜头)向后移动一点点。

·在3DLayout窗口中按下滑属左键,并慢慢地向3DLayout窗口下方拉动鼠标,这时候,我们可以从比较远的距离观察我们的场景(相当于镜头拉离我们所建构的实验室)。

这个动作让我们能够看到我们之前所创造出来的新camera,这个新camera目前以一个白色摄影机状的盒子来表示。

·按下OrbitCamera按钮以环视整个场景。

如果没有意外的话,您将会看见您所设定的camera跟它所锁定的目标,两者间透过一条黄色的线连结起来。

步骤2:

对镜头指定「行为模块」(Applyingbehaviorstothecamera)

  我们想要让NewCamera达成的任务如下:

首先,我们希望能够在一进入这个场景的同时,就以NewCamera来作为我们的观察视点(这件事情只要透过『行为模块』SetAsActiveCamera就可以达成了)。

然后,我们想要使NewCamera能够持续地锁定角色,再说清楚一点,也就是在Virtools开始算运算其它图形资料之前,就先将镜头所定在角色上面(使用『行为模块』CameraOrbit)。

·选取「BuildingBlocks」卷标。

·打开「Cameras」资料夹。

·打开「Montage」资料夹。

·将「行为模块」「SetAsActiveCamera」拖放到指定的镜头上。

·选取「Schematic」卷标,从Schematic可以检视摄影机互动模块的组合状态(NewCamerascript)。

一个代表SetAsActiveCamera的方块出现,方块的左边有一个输入端(input),而右边则有一输出端(output)。

·从「BuildingBlocks」面版中打开「Cameras/Movement」资料夹。

·将「行为模块」CameraOrbit拖放到Schematicview里,摆在「行为模块」SetAsActiveCamera之右,如图所示。

·在Schematicview里将鼠标移到CameraOrbit「行为模块」方块上按下右键,这时会出现一个选单,然后在选单里选择Editparameters。

这个动作将会开启一个对话框,这个对话框能让您指定该camera所要锁定的目标。

·点选按键(Eyedropperbutton),并从3DLayout视角中选取角色Scientist。

·点取OK。

步骤3:

设计一套「行为模块流程」(Designingabehaviorflowchart.)

  现在,我们的NewCamera已经拥有两个「行为模块」了。

注意:

在Virtools里所有的「行为模式」实时处理与绘制,每执行一个Frame(画格)都依循下列的执行程序运作:

-处理「行为模块」

-运算绘制场景

-处理「行为模块」

-运算绘制场景

-依此类推

  在Virtools中,一个基本处理周期(basiccycle)(包括一次的『行为模块』处理与场景算图)被称为一个Frame(画格)。

举例来说,framerate(画格更新率)为30fps代表了上述的基本处理周期在一秒钟里需要被连续执行30次。

在这一课里,我们将会以Frame的概念来描述所有的「行为模块」是如何地被连续组合起来的。

  注意:

Frame这个字在Virtools也指在3D环境里被用来标示一个位置或是有方向性的虚拟对象,小心别混淆了(其实在其它的软件里如3DMAX,这样的对象通常被叫做Dummy)。

以下就是我们所希望在camera上所执行之「行为模块」的顺序:

1.激活演出场景。

2.切换到NewCamera(执行SetAsActiveCamera)。

3.运算绘制场景。

4.让NewCamera锁定在角色(执行CameraOrbit)。

5.运算绘制场景(Renderthescene)。

6.回到第3步(以便在每一个新的Frame绘制之前都能重新执行CameraOrbit)。

步骤4:

观察所设定的「行为模块」如何运作(Understandinghowbehaviorsbasicallywork)

  在学习如何创造「行为模块流程」之前,我们得花点时间搞清楚「行为模块」是如何运作的。

基本上,所谓的「行为模块」就是一些执行程序中的组件,当其被触发激活时,就会展开特定的作业与效果。

这就是它们「输入端」(inputs)(位于每个『行为模块』的左侧)的作用:

「输入端」(inputs)接收以事件为基础的讯号(event-basedsignals),并负责触发该「行为模块」激活之后一连串的处理程序。

  某些「行为模块」或许需要设定一些参数以执行它的工作。

这些参数能够藉由一群称为「参数输入插脚」(inputparameterpins)的小点来输入与控制,您可以在「行为模块」方块的上方找到这些「参数输入插脚」。

  一旦某个「行为模块」完成它所负责的任务,它将会传送一些事件基础讯号出去,透过位于盒子右方的「输出端」(outputs),然后接着触发连结到这些「输出端」的其它「行为模块」,继续执行它们的任务。

一个「行为模块」的执行结果或许还会输出一些「计算参数」(computingparameters),而这些「计算参数」则是透过盒子下方一些称为「参数输出插脚」(outputparameterpins)传送出去的。

步骤5:

在Schematicview里新增「行为模块流程」(CreatingthebehaviorflowchartintheSchematicview)

  现在,让我们试试看以一些基本的规则来建立属于自己的「行为模块」流程。

我们可以看到在最左边的箭头状的Start尖端与「行为模块」SetAsActiveCamera之间的连结,这连结所代表的意义是:

当您按下Play按键开始播放您的作品时,「行为模块」SetAsActiveCamera将第一个被触发激活。

  一旦该「行为模块」的工作完成(切换到NewCamera),SetAsActiveCamera将藉由它盒子上的「输出端」送出一个讯号。

若是我们希望接下来要执行CameraOrbit,我们得在SetAsActiveCamera的「输出端」与CameraOrbit的「输入端」之间建立起连结才行。

·点选Schematicview工具列中的Link选项。

·在SetAsActiveCamera里选择output。

·在CameraOrbit里选择input。

  到这里,我们已经建立起下列的简单「行为模块」流程了:

1.激活演出场景。

2.执行SetAsActiveCamera。

3.运算绘制场景。

4.执行CameraOrbit。

  注意我们刚刚所建立的连结上头显现的指示0/0:

这代表该连结所会延续(delay)的时间。

它告诉我们从SetAsActiveCamera的「输出端」传送到CameraOrbit的「输入端」需要花费0个Frame的时间。

换句话说,SetAsActiveCamera与CameraOrbit两个动作在以Frame为执行单位里已经被串成一个执行程序。

·按下状态区里的Play按钮,以激活演出场景。

  如您所见,现在NewCamera变成了activecamera(Virtools以此camera为最起始的视点,算出整个场景),目前此camera正锁定在角色上。

要是您使用数字键盘上的方向键让该角色在场景里四处移动一下,您会发现NewCamera并没有跟着角色而动。

别担心,看看我们刚建立的流程:

原因出在于我们只要求该camera在开始演出场景时锁定角色一次而已。

·按「RestoreInitialCondition」(回复初始条件)按钮停止演出。

·按下状态区里的Play按键,再次激活演出场景。

  正如您所看到的,现在camera再一次地对准了目标角色。

当然啦,要是您现在将角色移开的话,camera是还不会跟着走的。

·按「RestoreInitialCondition」(回复初始条件)按钮停止演出。

步骤6:

在「CameraOrbit」里加入一个循环(CreatingafeedbacklooponthebehaviorCameraOrbit)

  要想让camera持续锁定追踪该角色,我们必须在每个frame运算前都执行一次CameraOrbit才行。

要达到这个效果,我们得在它的「输出端」和「输入端」间建立起一道延续值为1个Frame的连结。

如此,「行为模块」CameraOrbit将会在每个新的Frame开始执行时,重复执行一次。

·在Schematicview工具列里点选Link指令。

·先在CameraOrbit里选择output。

·再将鼠标移向右边,并轻击一下以创造一个连结控制点(linkcontrolpoint)。

·如下页所示般,轻击鼠标,继续创造另外两个连结控制点。

·按下CameraOrbit的「输入端」。

·按下RestoreInitialCondition按钮以停止演出播放。

·现在,按下StatusBar上的Play按钮,重新播放一次演出场景。

  我们发现camera已经会追踪锁定移动中的角色了,因为「行为模块」CameraOrbit在每个frame绘制之前都会被重新执行一次。

按下Schematic工具列上的Trace按钮以激活Trace模式,并实时地观察执行中的「行为模块」:

您会看到以红色的高亮度显示着的「行为模块」CameraOrbit正一次又一次不断地执行着。

  恭喜啦!

您已经在Schematicview里创作了自己的第一个「行为模块」流程了。

在下一课中,我们将让您知道,当您能将Schematicview运用自如的时候,Virtools能够展示多么强大的威力!

记得要储存您辛苦完成的作品哦,因为您将会于下一课里在上头继续增添新的东西。

只要用第2课里所学到的VirtoolsPlayer就可以随时观赏您的得意作品了!

[NextPage]

二、障碍物回避的处理

  这一课里,我们将教您如何为您的角色附加上基本的障碍物回避功能,使用到的是「碰撞侦测行为模块」与「属性设定」。

  在Virtools里要处理障碍物回避的方式,其中之一就是利用Virtools所提供的「碰撞总管」(CollisionManager),「碰撞总管」会自动替您计算所给定的3D对象间会产生碰撞与否,是个很方便的工具。

要达到这个效果,我们需赋予角色叫做PreventCollision的「行为模块」。

一旦激活,这个「行为模块」会询问「碰撞总管」相关的信息,以决定该角色会跟哪些3D对象产生碰撞行为。

若有任何碰撞被侦测到,这个「行为模块」将会让角色稍稍后退,以避免直接撞击。

  要执行碰撞侦测测试,您的「碰撞总管」得要有一张会发生碰撞的障碍物清单才行。

我们必须指定出场景中会发生碰撞的3D对象,并将其列入障碍物清单里头。

要这样做,我们得将这些对象一一挑出来,并且在个别对象上头贴上「障碍物」(obstacle)的属性。

所谓的属性(Attributes),其实还是一些特定的参数,您可以将它们贴到场景里的个别组件上,用来给它们一些指定的特性。

在这一课里,我们只会用到「障碍物」(obstacle)属性(可被碰撞侦测引擎所解读),其它还有许多不同的属性能够被贴在组件上头(像是角色的『生命值』、物体的『重量』等等),我们有机会再做介绍。

步骤1:

将计算机设定为潜在障碍物属性(Declaringthecomputerasapotentialobstacleusingattributes.)

·轻击LevelManager卷标。

·从Global资料夹里打开3DObjects子资料夹。

·从3DLayout工具列上点取Selecttool图标。

·从3DLayoutview中点取计算机,以选择它。

  一个「外切框」(boundingbox)会出现在3DLayout中,这表示该桌子已经成功地被选取了。

计算机(Newcomputer)同时也在LevelManager里以高亮度显示,就如一般被选取的组件一样。

·在LevelManager里的Newcomputer上按下滑属右键,并从选单里选取AddAttributes。

·这个动作开启了AddAttribute对话盒。

·「碰撞总管」CollisionManager上单击鼠标,以开启对应的属性目录。

·选取FixedObstacle。

·点取AddSelected。

·点取Close。

  您刚已经成功地将FixedObstacle的属性给附加在计算机上了。

这台计算机目前已经被「碰撞侦测引擎」登录为一个潜在的障碍物了。

步骤2:

应用PreventCollision(ApplyingthePreventCollision.)

·在开始将该「行为模块」应用到角色上面之前,先按下statusbar上的Play按钮,激活场景演出。

·以方向键让角色在场景中四处游走一番,然后让角色停在书桌前面(注意不要让角色和书桌接触)。

·再一次按下Play按钮,暂停演出的进行(注意不要按到RestoreInitialCondition按钮,因为您只是想暂停,而不是想倒带!

)。

·选取BuildingBlocks。

·开启Collisions资料夹。

·开启3DEntity资料夹。

·将「行为模块」PreventCollision拖曳到角色上。

  在重新测试场景之前,让我们从Schematicview里先检视一遍角色所有行为模块的script吧。

·选取Schematic卷标以开始检视scripts。

·使用垂直滚动条来检视角色的script。

顺利的话,您将会看到下列的script。

·在Schematicview里,您将可以很轻松且可视化地辨识所有script里的「行为模块」,只要轻轻地点选代表该「行为模块」的盒子就行了,甚至是要任意拖动它们都不是问题。

正如您所能看到的,「行为模块」PreventCollision并不像script里的其它两个「行为模块」般以亮灰色显示。

这告诉您在您点取RestoreInitialCondition按钮之前,这个「行为模块」是还不算数的。

·此时点取Play按钮,再次激活场景的演出,跳过「行为模块」PreventCollision的执行:

您将会发现角色仍然无视于障碍物的存在,轻松地穿过面前的书桌,如入无人之境。

·点取RestoreInitialCondition按钮。

·「行为模块」PreventCollision现在就正式算数了(如下图里的Schematicview所示一般)。

·按下Play按钮,让场景再次激活。

这一回角色就不再会穿过桌子,而是乖乖地停在桌前过不去了。

步骤3:

为您角色的script来张快照!

(Attachasnapshottothecharactersscript.)

  如您所见,Schematicview显示了我们场景中所有组件上的scripts(在这个例子里,指的是角色与camera)。

为了让您的scripts能更便于阅读与日后检索,Virtools让您能为您所写的script加上一张从场景理撷取的快照插图。

·从3DLayout工具列中点取SnapShot按钮。

·这个动作开启了SnapShot窗口。

·从SnapShot窗口里点选Capture按钮。

·在3DLayout里任意移动鼠标调整视线,然后在满意时按下滑属左键。

此时,您拍下了一张场景快照并出现在SnapShot里。

·将这张快照从SnapShot里拖放到角色的script中,并将其放置在snapshotspace里,如下图一般。

步骤4:

为您的script加上批注(Addcommentsinthescript)

·在Schematicview里的角色script背景任意处按下鼠标右键,开启选单。

·从选单里选取AddComments。

·这个动作在您的script里开启了一个批注栏,在里面,您可以任意地写下您对特定script所做的批注,也可以打上中文批注喔!

·在刚刚所新增的批注栏上轻击鼠标左键以选择它。

现在,它应该会变成灰色,且Comment字样应该会出现在Schematicview的工具列中。

·在Schematicview的工具列里Comment字样上双击鼠标左键,以编辑您所想下的脚注文本。

·键入「Thisscriptcontainsthemainbehaviorsforourcharacter.」并按下Enter键。

步骤5:

让角色能「脚踏实地」!

(Forcingthecharactertokeepwalkingonthefloor.)

  在存盘之前,让我们先回顾一下刚刚学到的几个基本步骤。

您或许已经注意,在场景中您的角色并没有「脚踏实地」老老实实地站在地面上:

您的角色居然漂浮在半空中,仿佛像有超能力一般。

事实上,由于角色和实验室基本上是分别被创造出来的(甚至或许来自完全不同的3Dmodeling工具),因此,没有人告诉过您的角色说实验室里的某个3D对象代表「地面」。

  要是我们想让角色真的能「脚踏实地」,我们就需要将场景中的特定3D对象宣告为「地面」才行(使用Floor属性),然后再「教导」您的角色如何把脚踏在地上(使用『行为模块』CharacterKeepOnFloor)。

在这个例子里,实验室里代表「地面」的3Dobject被我们命名为FloorOffice。

·从LevelManager里开启3DObject资料夹。

·在LevelManager里选取对象Ground01(或直接在3DLayout里以选取工具选择实验室的地板)。

·在LevelManager里的selection上右击鼠标,并从选单里选择AddAttributes。

·在CreateAttribute对话盒里,开启FloorManager数据夹,并选取Floor。

·点选AddSelected。

·点选Close。

好了,现在我们已经将「地面」宣告完成了。

·选取BuildingBlocks卷标。

·开启Characters资料夹。

·开启Constraint资料夹。

·将「行为模式」CharacterKeepOnFloor拖放到角色身上。

  让我们再检视一次角色的script。

如您所见,有些「行为模块」盒子的左方拥有两个「输入端」(CharacterController,KeyboardController,PreventCollision)但CharacterKeepOnFloor则只有一个。

举例来说,「行为模式」KeyboardController就有两个分别被称为「On」跟「Off」的「输入端」(在Schematicview里,将鼠标移动到这两个『输入端』上,就可以看它们的名称)

  在这个script里,「On」与起始点连结,这意味着在场景激活的同时,「行为模式」KeyboardController在整个场景演出里会持续地发生作用(使用Trace模式来做检查)。

而「行为模式」CharacterKeepOnFloor就只有一个单一的「输入端」称为「In」。

  一旦被触发,这个「行为模式」变会在垂直方向上重新调整该角色的位置(以确保角色能站立在我们之前所宣告过的『地面』上),并且藉由它的「Out」输出端传送出一个讯号。

因此,它只会被执行一次,就在场景刚开始被执行第一个Frame时。

因为我们实在想让角色能持续地保持在地

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1