献给所有UE3开发的朋友.
安装完的udk目录下有4个主要的文件夹
在UTGame文件夹中包含了下面这几个重要的文件夹
除了以上文件夹,UTGame文件中其他文件夹都不是很重要。
在UTGame\Content文件夹中放有大量的UT3内容(在u3中美术等资源称为内容。UT即虚幻竞技场,为Epic出的一款游戏)。最好把所有的内容都放在这个文件夹下。当你将游戏进行打包,它将自动脱去UT3的内容而不需要手动去删除多余的文件。我通常在Content 文件下创建一个文件来放置我的游戏内容。 如:
只要两个目录:一个存放关卡,一个存放upk文件。你不必像UT3那样需要设置成千上万的内容文件。大部分的游戏不需要众多的文件夹。举个例子,我们的游戏The Ball ,有1.5 GB 的数据容量,却只有20个upk文件。
· UnrealScript(unreal脚本)
进入Development\Src\目录,创建一新文件夹。如"MyGame"。这个文件夹的名字将作为编译后的.u文件的名称。假如你的游戏叫"Bobby",你最好把这个文件夹也改成"Bobby"。所有在这个文件夹里头的unrealscript 文件将编译成游戏使用的单个.u文件。
在"MyGame" 文件夹下创建"Classes"文件夹。在这个文件夹中添加从这个zip中解压出来的3个文件,MyGameInfo.uc, MyPawn.uc, MyPlayerController.uc。
下一步,编译。我们首先要确定游戏读取我们编译后的.u文件代码。进入 UTGame\Config\ 目录并打开DefaultEngine.ini。 找到 "[UnrealEd.EditorEngine]"部分,在这一部分的最后一行添加 "+EditPackages=MyGame" 。如下面:
+EditPackages=UTGame
+EditPackages=UTEditor
+EditPackages=UTGameContent
+EditPackages=MyGame
顺序很重要。因为这个顺序决定了导入和编译的顺序。
这一行代码可以使编辑器时启动总是导入MyGame.u文件。关闭文件的只读属性(否则不能保存),保存并关闭。当然删除 UTEngine.ini也行。这么做会强制引擎基于DefaultEngine.ini创建新的UTEngine.ini ,省得你去修改UTEngine.ini中对应的信息。
下一步, 进入Binaries目录,运行UnrealFrontEnd.exe. Frontend 是可以允许你处理大量事情(代码?)的重要工具。当前情况下我们将使用它来编译我们的代码。在工具栏顶部,点击"Make"标签右边的下三角键号,然后点击"Full Recompile"(全部编译)。
假如所有操作都是正确的,控制台中将会出现提示信息。当编译结束后在 UTGame\Script\ 中将生成"MyGame.u"文件。
· Ini files(ini文件)
下一步,我们让游戏使用我们自己定义的gametype (游戏类型)和pawn (出生)作为游戏开始的默认值。
打开 UTGame\Config\DefaultGame.ini。去掉文件的只读属性。 找到 "[Engine.GameInfo]"部分。
保存。 删除UTGame.ini ,它将以你修改过的DefaultGame.ini 创建一新的ini。
· Level(关卡)
进入Binaries\Win32, 创建UDK.exe的快捷方式. 这末尾添加 "Editor -log"。 举例 - "G:\UDK\UDKExampleGame\Binaries\Win32\UDK.exe editor -log"。运行。
创建一极简单的关卡。 右键点击 BSP Cube 按钮 ,在弹出的对话框中输入尺寸。X, Y, Z输入1024, 勾选 "Hollow?"。点击“Build”。
下一步,在左边工具栏中点击 "CSG Add"按钮。
推进到立方体里面,右键点击地面(立方体内部底面),在弹出的菜单中选择 - Add Actor - Add Playerstart,添加玩家出生地点。
重复上一步操作,不同的是这次我们增加一盏灯(add a Light)。然后将创建出来的灯移到房间中间。
保存关卡。我将这个关卡命名为 "MG-ExampleGameLevel",注意,前缀很重要。在MyGameInfo.UC中, "MG" 是被指定的前缀。假如没有这个前缀,游戏将不知道为它使用哪种gametype(游戏类型)。
然后, rebuild the level(重构关卡)。 在顶部菜单选择 - Build - Build All。
再次到顶部菜单。选择View - World Properties. 在弹出的WorldInfo 窗口中找到Game Type For PIE,改成 MyGameInfo。PIE 就替代了 Play-In-Editor,这就决定了在编辑器中播放游戏是使用哪种gametype(游戏类型)。
现在 右键点击地板 – 选择Play From Here 。注意你的关卡和游戏,变成第3人称的游戏啦!
Menu(菜单)
至于菜单,实际上也是个关卡。是在启动游戏时加载的关卡。这种关卡是包含了Kismet(unreal引擎的简单脚本编辑器)。
将你已有的关卡另保存为 "ExampleGameFrontEnd".
下一步,创建UI Scene(UI场景)。我们同样也要创建我们的首个UI package (包)。进入content browser (内容浏览器),在左下角点击“New”。填入package和UI Scene的名称。确定在Factory (类型)标签中选择UI Scene。
在窗口的任意地方右击选择- Place Widget(放置控件) - Button [Standard](标准按钮),创建按钮。重新缩放按钮直到覆盖整个屏幕(绿色边就是屏幕边缘,注意,默认就是覆盖整个屏幕的)。
为了让按钮能实现某些功能我们准备使用UI Kismet。但这样做实际上不是最恰当的方式。最恰当的方式是为按钮使用UnrealScript,因为UnrealScript更简洁一些,不会像 ui kismet那样有多余的信息。但是Kismet对于美工而言却是简单易懂更容易实现功能的。
在按钮上右键选择 - Unreal Kismet Editor.
在全局Sequence(序列)中,添加 New Event(新的事件) - UI - On Click, 和 New Action(新的行为) - Level(关卡) - Activate Level Event(激活关卡事件)。
并把它们连接起来,如图所示。
选择Activate Level Event,在其属性栏中找到EventName,输入名称(名称不能有重名),我命名为"OpenYourLevel",如上图。当有人点击按钮时,它将使关卡触发一个event(事件)。然后关卡会使用这个事件,并访问它的Kismet。目前我们要做的是使用控制台命令来加载下个关卡。
在我们完成这个UIScene前还要做最后一件事。在ui编辑器的空白处随便点击一下,在右上角的属性栏中找到Flags(标签) - Pause Game While Active(激活的时候暂停游戏),去掉勾选。
保存你的package(包). Packages 必须手动保存!将它保存在你所创建的目录里头,在这个例子中将它保存在UTGame\Content\ExampleGameContent\UPK.
现在将这个event(事件)连接到你的关卡。打开关卡的Kismet (顶部工具栏的绿色K图标), 在空白出添加新的Action(行为) - UI SceneS(UI场景) - Open Scene(打开场景). 将它连接到Level Startup (新建新的 Event - Level Startup(关卡开始))。在内容浏览器中选择刚才创建的UI,然后在kismet中选择OpenScene节点,在其属性栏中找到Scene,添加刚才创建的UI ,如下图所示。
添加新的Event - Remote Event(远程调用事件)和新的Action - Misc - Console Command(控制台命令). 在 Remote Event(远程事件)属性栏中, EventName指定为和你要调用的按钮相同的Event(事件)名称 ,在我的例子中叫"OpenYourLevel"。 在Console Command(控制台命令) 添加新的信息"open MG-examplegamelevel" – 或者调用你可以游戏的关卡。这个事件中按钮按下的时候将会被执行,通过控制台命令他将加载到你的关卡中。
现在 添加Action(行为) - Toggle(开关) - Toggle Cinematic Mode(Cinematic模式开关)和Variable (变量)- Player (玩家),并将它们连接起来。这么做在关卡启动的时候会对进行玩家冻结。连接图如上图所示:
在关卡开始的时候可以使用matinee 来播放剧情动画。可以在Hourences.com找到关于的编辑剧情的教程。你可以在这个关卡中创建任何类型的3D背景环境,也可以使用2D图片来简单的覆盖整个屏幕。
完成!注意在编辑器中这个是没有功能的。编辑器是不允许你使用一个"Open"控制台命令的。
· Localization(本地化)
本地文件包含游戏所需所有文本。想要改变游戏的语言版本,你只需指定指定另一语言文件即可。
我通常删除Localization 文件夹里头所有的ini文件,然后从头开始。但是这样做将中止UT3 demo (udk自带的游戏),所以假如你仍想用原来的demo就不要删除。
首先, 关闭编辑器。编辑器只在启动的时候检测ini文件。除非你重启它,否则它是不会检测其他你自己创建的ini文件的。确定保存关卡和package 。
创建一TXT文件, 重命名为 "MyGame.int"。然后添加
[ExampleOfASection] 01=Most Awesome Title Ever 02=To play click the button
中括号里头的文字为一section(部分),用来标记内容。 01和02只是指定了在section所处的行数而已。当然你不一定都使用数字。
再次打开编辑器,然后打开你的关卡和界面package 。打开你制作的UI Scene (界面场景)。右键- 选择Place Widget (放置控件)- Label [Standard](标准标签), 创建一label(标签)。然后使用相同的操作再创建一个。选择其中一个,在右上角的属性栏中找到Data(数据) - Data Source(数据源) - Mark Up String
添加 "<strings:mygame.ExampleOfASection.01>" 到 Mark Up String。
格式为NameOfIntFile.NameOfSection.NameOfLine.(ini文件名.Section部分名.行名)
你可以使用相同的方法为另外一个label进行设置。
假如你在ini文件中改变这一行,它将跟着游戏或者编辑器进行加载。
· Ini Files - More Fun(ini文件,更多乐趣)
让我们回到ini文件来修改更多的配置。关闭编辑器。编辑器运行的时候你是不能修改ini文件的。
打开DefaultEngine.ini - section [URL]
在[Engine.PackagesToAlwaysCook] 部分, 添加"+Package=ExampleGameFrontEnd"。这将使UnrealFrontEnd cook这个文件。
在 [Engine.StartupPackages]部分, 添加"+Package=MyGameInterface"。这将使游戏总是加载这个package。你就不必为每个package执行同样的操作。 特别的界面元素包基本都符合这个条件,所以剩下的不必进行重复的操作。
在 [Engine.PackagesToForceCookPerMap] 部分, 添加".Map=ExampleGameFrontend",immediatelyfollowed by ".Package=MyGameInterface." 这会强制package在进入关卡时强制使用上面的信息,并且只能作用于那个关卡。界面元素的packages 也会强制加载进去。有时候关卡会在加载某一资源时发生意外,可以强制cooking他们来解决这个问题。
在 [FullScreenMovie]部分,可以用来指定哪个地方要播放所指定的视频的。
OK,完成了!再次删除 UTEngine.ini ,然后它会使用DefaultEngine.ini所设置的配置进行代替。
启动游戏,检测下你的关卡。
· Cooking
然后, cooking。Cooking基本上就是最终的编译了。 它会将你制作的内容都准备好。
Cooking是将你的所有内容包打包成少量的受保护文件的一个过程。你的内容包是不可能至少是很难再被提取出来的。
要完成这个环节,请再次打开UnrealFrontEnd.exe (在Binaries文件夹中), 注意在左上角的"Cooking"标签(不是按钮),点击它,找到"Maps to cook"(cook地图),输入你的单个关卡名称。你不需要在这里输入"ExampleGameFrontEnd"关卡。记住,你已经将它在ini文件中设置成"AlwaysCook"(总是执行Cook)。
下一步,在顶部工具栏点击 Cook
完成后,它将创建UTGame\CookedPC 文件夹。文件夹中的内容是将要发布给玩家使用的游戏内容。
· Packaging(打包)
运行UnrealFrontEnd.exe, 点击 "Package Game" ,这弹出的对话框中输入你的游戏的名称。打包完后在主目录下你将找到打包完后的游戏安装包。这样就完成游戏的打包啦!
· Troubleshooting(故障检修)