项目配置和环境测试

来源:互联网 发布:淘宝助理一键导出 编辑:程序博客网 时间:2024/06/01 10:40

@系统需求

并不需要顶级配来运行UDK,但是就向任何软件一样依然需要一个合适的系统需求。官方说明如下:

@最低配置

#WindowsXP SP2 or Windows Vista

#2.0+ GHzprocessor

#2 GBsystem RAM

#SM3-compatiblevideo card

#3 GB freehard drive space

确保我们工作的电脑满足这些需求,然后我们就可以安装UDK了。

@行动—安装UDK

Epic的官方网站是最好的UDK下载网站,它将会为我们提供最新版本的UDK下载,所以我们就从这里下载UDK。

1、访问http://udk.com/download获取最新版本的UDK。

2、运行安装文件。接受条例,选择安装路径。UDK会默认使用版本名称来命名安装文件夹,但是为了保证一切都有条不紊最好使用一个项目名字来命名文件夹。这会避免不同的项目使用相同的文件名称。在这本书中,我们把我们的项目叫做Awesome Game,所以会更改安装目录的名字。

3、在检测完安装先决条件和安装好UDK之后,安装程序会询问我们下一步怎么做,这里我们选择回到桌面。

@安装目录一览

我们来看看安装UDK的文件都是怎么组织的。

@Binaries

第一个文件夹Binaries包含了游戏的可执行文件和导入工具。

在这本书中,我们将不会使用到这些导入工具,但是知道他们是做什么的总是有帮助的。

#ActorX:为使用诸如3D Max和Maya一类的工具创建的静态和动画游戏对象提供导出补丁。

#FaceFXPlugins:角色嘴型同步和面部动画工具。

#GFx:制作Scaleform菜单界面和抬头显示的工具。

#SpeedTreeModeler:用来快速创建树木和植被以丰富游戏场景。

@Development

下一个文件Development就是我们工作的空间。你在此前可能已经听说过一个游戏的原代码一类的东西。Development\Src文件夹就是我们游戏存放代码的地方。Src文件并不是空的,它里面已经有很多文件夹了。Epic提供了UnrealScript源文件以供我们参考以便更简单地完成我们自己的代码。如果你是个程序员,你的工作将是花费70%的时间来阅读这些代码。切记一条:永远不要试图去修改Epic的代码!在这些代码组织背后有很多C++源文件,我们无法访问c++源文件,所以如果我们改变了这些代码,就会破坏这些代码的结构。而我们要做的所有工作就是创建我们自己需要的文件。

@Engine

Engine文件夹包含了游戏和编辑器的资源和配置文件,即使是经验丰富的UnrealScript程序员也很少回去就出那些东西。

@UDKGame

接下来的文件夹就是UDK项目的核心所在。UDKGame存放着我们所有的游戏内容,包括配置文件,启动版权画面等等。下面来逐个看看吧:

Autosave: 这个文件夹在你第一次安装UDK的时候是没有的。当你打开编辑器开始创建关卡的时候,编辑器将会周期性地想这个文件夹中储存你所创建的地图的拷贝。如果编辑器死机或者电脑死机了,你就可以从此恢复你的大部分工作,从而不会让你损失的太多。

Config:我们使用这里的ini文件来改变游戏运行的配置,同时使得玩家也可以自定义配置,比如游戏分辨率和键位设置。INI文件可以使用任何文字编辑工具打开比如记事本。这里有个DefaultInput.ini文件中关于键位绑定的例子:

.Bindings=(Name="E",Command="GBA_Use")

.Bindings=(Name="LeftMouseButton",Command="GBA_Fire")

.Bindings=(Name="RightMouseButton",Command="GBA_AltFire")

.Bindings=(Name="C",Command="GBA_Duck")

.Bindings=(Name="Escape",Command="GBA_ShowMenu")

Content: 地图,声音,角色模型,环境美术文件都在这里存放。在这个文件中我们还可以分开来创建移动平台游戏所需要的资源,如果我们正在开发一个IOS游戏的话,这种文件结构可以将此与PC游戏的文件分开。官方提供的文件结构并不是一定的,我们可以按照我们的需要来组织我们的文件。只要这些文件在Content目录下,游戏就可以找到它们。

Flash: 这个文件夹包含了我们用来创建游戏中使用的 Scaleform菜单和所有抬头显示源文件。

Localization:如果需要使用不同的语言来发布游戏,这里就可以存放需要的翻译文件。和INI文件一样,INT文件也可以使用文本编辑工具打开。

Logs: 这个文件夹记录了所有我们录入的游戏事件和代码调试信息,这对于我们调试代码是非常有帮助的。LOG文件也可以使用纯文本编辑器来打开。ry helpful when trying to fix broken code. The LOGfiles can be opened with a plain text editor.

Movies: 我们创建的任何视频剪辑都在此运行,同时也包含游戏读取画面和关卡读取画面。

Script: 源码编译后的.u文件都会存放于此。游戏将会在各个不同的地方使用到这些文件。这里将会仅仅存放编译后的文件,而不会存放源代码。

Splash:这里出来有游戏和编辑器启动时显示的图片之外,还有 Epic forums和the Unreal Developer Network的链接。 这两个东西都是学习怎样使用UDK的宝贵资源。

不要混乱!在下一节中我们将深入探索Development文件夹,我们可以通过安装和设置几个程序来书写UnrealScript文件。开始吧!

@使用外部程序来编码

如果你喜欢的话,脚本文件可以被记事本一类的纯文本编辑器打开和编辑,但是有更好的免费工具来使得一起更加轻松。

@ConTEXT

ConTXET是一个被设计来更简单地编辑各种程序语言的免费软件。它提供高亮和一键编译工具。

@安装ConTEXT

http://www.contexteditor.org 下载最近版本。

安装过程省略。

安装完成后启动看到如下界面:

@配置ConTEXT

我们现在来配置ConTEXT以便用于更加简单地阅读UnrealScript,并且使他可以一键编译脚本。

1、 单击工具栏Options,然后选择Environment Options。第一个选项卡General,设置Whenstarted为Open last file/project。这样可以自动在下次启动ConTEXT的时候自动加载上次编辑的文件。

2、 确认Rememberediting positions被勾选。这样使得下次启动时光标还原关闭时的状态。

3、 在Editor选项卡取消勾选Allow cursor after end of line。

4、 取消Smarttabs勾选。

5、 勾选Linenumbers。

6、 把缩进全部设置成4或者你习惯的。

7、 接下来设置代码编译。在ExecuteKeys选项卡单击Add,然后输入 .uc,确定。

8、 选择F9

9、 在第一行Execute选择你UDK安装目录下Binaries\Win32\UDK.exe。Start In选择前面一样的路径去掉UDK.exe。

10、 Parameters输入“make”,告诉UDK.exe我们是要编译代码而非运行游戏。

11、 Save栏选择Save to All Files Before Execution.

12、 勾选CaptureConsole Output Scroll Console to the Last Line

13、   设置高亮。关闭ConTEXT,到http://wiki.beyondunreal.com/ConTEXT找到UnrealScript  highlighter复制代码。创建一个.chl文件,粘贴代码保存,然后替换到ConTEXT的高亮文件夹。

14、   打开ConTEXT在顶部工具栏选择UnrealScript,完成所有配置。

@UnCodeX

在Development\Src文件夹下面有2000多个文件,UnCodeX可以帮助我们很好地管理和浏览这些文件。

@安装UnCodeX

http://sourceforge.net/ projects/uncodex安装文件下载。它是免费的。

安装过程省略。

@配置UnCodeX

1、  打开UnCodeX。第一次启动它会提示我们设置,单击Yes。

2、 在弹出窗口中单击Add。

3、 选择UDK安装路径下面的Development\Src。

4、 接下来的窗口,单击OK。然后选择Yes浏览路径。

5、 设置完毕。

这本书将会使用这两个免费工具来完成所有编码工作。但是你也可以选择其他工具。

nFringe

http://pixelminegames.com

WOTgreal

http://www.wotgreal.com

@配置项目

回到UDK安装目录,我们只需要创建3个文件夹。第一个在UDKGame\Content下用来存储项目需要的所有美术动画资源。第二个是UDKGame\Content\Maps下用来存储关卡。对于程序,我们仅需要关注接下来的这个文件夹。

@配置AwesomeGame

1、  在Development\Src下创建一个AwesomeGame文件夹。再在其中创建Classes文件夹。我们所有的代码都将自此运行。

当文件编译之后,最终的.u文件名将和这个文件夹的名字相同,所以当我们编译好AwesomeGame.u之后,他将会出现在UDKGame\Script中。由于空文件夹将被会忽略掉,所以创建第一个类。

2、  创建一个名为AwesomeGame拓展名为.uc的文件,使用ConTEXT在里面输入:

ClassAwesomeActor extends Actor

placeable;

defaultproperties

{

Begin Object Class=SpriteComponent Name=Sprite

Sprite=Texture2D'EditorResources.S_NavP'

End Object

Components.Add(Sprite)

}

第一行定义了对象名字还有他与游戏中其他对象的关系。这个类名必须和文件名相同,否则出错。

extends  Actor语句将我们的AwesomeActor声明为Actor的一个子类。

第二行表明此类可以在编辑器中被放置,诸如灯光、路径、运载工具等等,他们的uc文件中都有此声明,以便他们可以在编辑器中放置。至于导弹发射爆炸一类的东西就没有此声明,因为他们是在游戏运行时被创建的。

 Defaultproperties中的内容为此类创建了一个精灵使得你在编辑器中可以看到他。

现在,在我们编译之前我们需要使游戏知道有AwesomeGame文件夹。

3、  打开UDKGame\Config\DefaultEngine.ini (不同版本UDK文件可能会有所不同)添加AwesomeGame包到EditPackages列表末尾

 [UnrealEd.EditorEngine]

+EditPackages=UTGame

+EditPackages=UTGameContent

+EditPackages=AwesomeGame

4、 保存关闭ini文件。

Development\Src路径下的文件夹将不会被自动侦测到。主要原因是在某些情况下我们可能不希望包含某些类在里面。举个例子,我们可能有不同的文件夹分别是属于PC项目和IOS项目的。他们两个都在Development\Src目录之下,但是PC版本并不需要IOS版本的代码。还记得我们曾经浏览过的Config文件夹吗?这个文件夹包含了所有的游戏设置。来看看吧。

DefaultEngine问价包含了诸如分辨率和贴图细节等等信息。同时也包含了EditPackages列表,这个列表将告诉游戏哪些包需要编译还有以怎样的顺序编译。

[UnrealEd.EditorEngine]

+EditPackages=UTGame

+EditPackages=UTGameContent

*这个文件在后来的版本中可能被拆分开来,但是依然包含在此文件夹中。

 

很好。在我们的Development \Src目录下有另外两个文件夹UDKBase和UTEditor。但是那儿却没有这些文件的存在,那是什么情况呢?那么让我们到更高一级的ini树去看看。在这个ini文件的顶部我们看到它同样有一个父级:

[Configuration]

BasedOn=..\Engine\Config\BaseEngine.ini

那么我们关掉DefaultEngineUDK.ini来看看那个在Engine\Config目录下的BaseEngine.ini文件。

EditPackages=Core

EditPackages=Engine

EditPackages=GFxUI

EditPackages=GameFramework

EditPackages=UnrealEd

EditPackages=GFxUIEditor

EditPackages=IpDrv

EditPackages=OnlineSubsystemPC

EditPackages=OnlineSubsystemGameSpy

EditPackages=OnlineSubsystemLive

EditPackages=OnlineSubsystemSteamworks

非常好!看上去所有的文件夹几乎都已经包含在里面了,除了MyMod那个空的示例文件夹。同时,如果我们查看BaseEngine.ini的顶部,我们可以发现这里就是整个ini文件链的终结,BaseEngine.ini再没有父级文件了。

那么,游戏怎样来使用这些文件呢?如果你在安装ConTEXT的时候还尚未运行过游戏或编译过代码,那么迅速地运行游戏并在主菜单时退出。游戏第一次运行将会使用Default和Base 两个ini文件的所有包含的文件信息来组建这些游戏实际上使用的包含在UDKGame\Config目录中的文件:

那么很明显的问题是为什么会有这么多文件呢?好的,让我们来再次深入考察下BaseEngine.ini文件看看这究竟是为什么。此文件大约向下三分之二的地方我们可以发现一个系统设置清单(*译者注:UDK1205以后的版本此清单是BaseEngine.ini同一文件夹的BaseSystemSettings.ini文件中):

MotionBlur=True

MotionBlurPause=True

MotionBlurSkinning=1

DepthOfField=True

AmbientOcclusion=True

Bloom=True

bAllowLightShafts=True

Distortion=True

这些设置控制一些游戏中的视觉效果比如运动模糊和Bloom。如果我们改变了这些东西会发生什么事情呢?这当然将会改变游戏的视觉效果,但是有另外一个问题。在玩游戏的时候,我们可以在设置中复位游戏的默认设置、如果我们在这些文件中改变了设置,游戏是怎样知道默认设置是什么呢?游戏就运用这些Base和Defaultini文件当玩家改变诸如分辨率或者按键绑定一类的东西时,游戏在需要的时候依然可以知道安全的默认设置。可能看起来有点乱糟糟的样子,但是使用起来非常简单。使用这些Base和Default文件,开发者可以使得游戏象他们想的那样默认运行,玩家也可以随意更改游戏的设置。

值得说明的是,我们将AwesomeGame添加到列表的最底部,因为编译器将会从上到下扫面这个列表,发现了变化就会重新编译,而且由于某些类是继承下来的,所以父类必须先行编译。

@更多ini文件的操作

花一些时间去浏览DefaultGame.ini你会发现很多设置都存在其中,比如地图限制时间。

@编译和测试

我们将要使用ConTEXT来编译我们写的代码,并在虚幻编辑器里面测试。不了解虚幻编辑器关系不大。

@编译测试AwesomeActor

1、 打开ConTEXT按F9编译。如果一切正常,编译器将会给出一条成功信息。

如果有警告或者错误信息,再次确认所有拼写和标点。错误信息会提示你行号等信息。

2、编译好之后,来添加AwesomeActor到关卡之中。如果快捷方式找不到编辑器启动图标,你可以到AwesomeGame\Binaries\Win32目录右击创建快捷方式并右击快捷方式选择属性,目标选项卡中的地址编辑框后,添加“ editor”指令,此时双击快捷方式就可打开编辑器。

3、 打开编辑器。

 

4、 关闭欢迎界面和内容浏览器。工具栏File,Open打开Example.udk。

我们将会马上注意到地上有些奇奇怪怪的东西浮在那里。Actor classes在游戏中通常都是不可见的,但是在编辑器中会有一个精灵以便我们编辑。我们在AwesomeActor中添加的精灵既是此用。

现在我们来添加我们的AwesomeActor。

5、 打开内容浏览器

6、 选在内容浏览器顶部的ActorClasses选项卡。

7、 这看起来和UnCodeX中的class树大不相同了,Classes被按照Categories分类以便在编辑器中更好地组织起来,但我们只需要一个普通的结构,所以取消勾选上面的Show Categories选项。

我们之前的AwesomeActor class出现了。

8、 选择AwesomeActor关闭内容浏览器。在3D视口右击地板在弹出选单中选择Add AwesomeActor Here。

这就是AwesomeActor,我们在类默认属性中添加的精灵在这儿出现了。一般来讲,这些精灵都不会出现在游戏中,但是我们并没有在默认属性中给他任何约束,所以现在我们在游戏中也可以看到他。

9、 单击Play按钮运行游戏、

10、     确认AwesomeActor已经添加到游戏中了,然后哦关闭游戏窗口。

11、     现在存储关卡,并在Content\Maps内创建AwesomeGame文件夹,将关卡保存到里面。

12、     关闭编辑器。

接下来创建一个HelloWorld程序。用ConTEXT打开AwesomeActor.uc。

第一件事情是使精灵不在游戏中显示,但依然在编辑器中显示。在默认属性中添加几句简单的代码。

13、     在default properties中开辟新行,添加如下代码:

Begin Object Class=SpriteComponent Name=Sprite

Sprite=Texture2D'EditorResources.S_NavP'

HiddenGame=True

End Object

Components.Add(Sprite)

14、     现在添加HelloWorld。这个应该写到default properties前面。

function PostBeginPlay()

{

`log("Hello World! ==========");

}

PostBeginPlay是在Actor第一次创建时运行的一个函数,所以它是个添加helloworld的好地方。

Log行将会往日志文件中输出文字以便我们参考此类是否正确地运行。目前我们的类整体应该是这个样子:

class AwesomeActor extends Actor

placeable;

function PostBeginPlay()

{

`log("Hello World! ==========");

}

defaultproperties

{

Begin Object Class=SpriteComponent Name=Sprite

Sprite=Texture2D'EditorResources.S_NavP'

HiddenGame=True

End Object

Components.Add(Sprite)

}

编译之前请确认是否已经关闭了编辑器。如果编辑开着,新的.u文件将无法替换旧的,这会导致错误。

15、     关掉编辑器之后,在ConTEXT中按F9编译代码。

16、     打开编辑器,打开AwesomeMap.udk我们先前保存的关卡。

不用我们对AwesomeActor做任何更改,因为任何变化都会自动应用到对应的Actor上去。

17、     点击Play运行游戏。AwesomeActor现在已经不见了,我们添加在default properties里的语句正常运行。但是HelloWorld呢?

18、     关闭游戏和编辑器。找到UDKGame\Logs文件夹,看看这里面的文件。

这里应该有Launch.log,Launch2.log还有一些其他取决于你启动了游戏,编辑器,编译器多少的数字备份。当运行的时候,就会在此创建一个Launcher.log的备份,并且开始一个新的日志文件。当我们在编辑器中启动一个游戏的时候,他就会创建一个名叫Launcher2.log的文件。所以,既然我们是从编辑器中测试的我们的代码,我们就查看一下Launcher2.log。

19、     打开Launcher2.log。

[0008.05] Log: Game class is 'UTGame'

[0008.24] Log: PrimaryPhysX scene will be in software.

[0008.24] Log:Creating Primary PhysX Scene.

[0008.26] Log:Bringing World UEDPCAwesomeMap.TheWorld up for play (0) at 2011.05.19-15.15.52

[0008.28] ScriptLog:Hello World! =========

[0008.28] Log:Bringing up level for play took: 0.193269

我们已经看到Hello World出现了。

现在你知道我们为什么要在代码中的HelloWorld后面加一些等号了。它很容易就会在大量的信息中消失了踪迹,所以我们在上面加一些特殊符号来方便我们快速地找到它。

@注释

注释是程序员最有效的工具之一。两个目的。

一、它们会被编译器忽略,依次可以用来在代码中添加一些记录。这么做可以让你在很长时间后还可以记起这些代码的作用。如果你和其他人一起工作,注释也可以帮助他人理解代码。

二、注释可以快速删除和恢复不需要的代码行。

UnrealScript有两种注释方:1、//;2、/*…*/。

注意下列情况:

这样注释将会打断代码,所以不能嵌套。

/* Commenting out some code.

// Having a double slash comment inside here isfine.

Ending the comment. */

这样也是不科学的:

/* A comment.

/* A comment inside a comment like this wouldnot work. */

Ending the comment. *

当你工作的时候,不要忘记添加注释!这样可以使得你的代码更加易于阅读和理解。

@提问-文件和路径

1、UDKGame文件夹下那个文件夹存放关卡?

A、Build  B、Content  C、Localization  D、Src

2、下列哪个是DefaultEngine.ini文件链的最高级?

a. DefaultEngineUDK.ini

b. BaseEngine.ini

c. UDKEngine.ini

3、“placeable”在类文件中起什么作用?

@总结:

我们在这一章主要学习了UDK怎样工作以及怎样建立我们自己的项目。

特别地我们涉及了:

#UDK目录以及每个文件夹的作用。我们知道哪个文件夹是程序员使用的哪些文件夹又是艺术家和设计师使用的。

#可以使用哪些工具来编写UnrealScript。我们知道有编程的两个方面,编码和容易的管理浏览已经存在的代码。

#怎样建立自己的项目和编译测试自己写的程序。我们了解到怎样使用虚幻编辑器和日志文件来帮助我们测试和确保代码正确运行。

既然我们已经了初步了解了UDK,下面我们就准备学习更多关于的UnrealScript语言的内容,变量,操作符。这也是我们下一张要学习的内容。