UDK入门教程.doc_第1页
UDK入门教程.doc_第2页
UDK入门教程.doc_第3页
UDK入门教程.doc_第4页
UDK入门教程.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UDK入门教程-第一章:第一节 建立一个空工程-上第一步:首先,我们从主页下载最新版(此文以UDK-2010-01版为例)安装完成后,我们找到UDK-2010-01文件夹,对其复制粘贴创建一个副本,将目录名改成你喜欢的名字,比如我创建为KingdomWorld,以后文章都以KingdomWorld为例。(以下步骤将对其进行大量修改,创建副本的目的是为了保留原版)第二步2.1.进入KingdomWorldDevelopmentSrc目录,找到UTGameContent文件夹将其全部删除。2.2.进入KingdomWorldDevelopmentSrcUTGame目录,删除UTStats.uci以及Classes文件夹下面的所有文件,但是保留Classes文件夹。2.3.进入KingdomWorldDevelopmentSrcUTGameClasses目录,创建一个do_not_delete.uc,键入以下内容1. class do_not_delete extends object;2. defaultproperties3. 4. 复制代码创建此文件的目的是因为让UTGame目录顺利编译成UTGame.u文件,因为UDK免费版的原因,启动编辑器和游戏他会自动寻找UTGame.u文件,所以此包无法全部删除(除非你有源代码级授权,就可以修改UTGame目录指向)第三步进入KingdomWorldUTGameContent目录,删除所有文件KingdomWorldUTGameContentMapsEnvyEntry.udk 文件和KingdomWorldUTGameContentUIUI_Fonts_Final.upk文件除外,这两个是系统需要的底层pak 包,字体和空场景,最好别删。第四步由于我们已经删除了所有关于原始的UTGame的资源和代码文件,现在的文件夹已经相对于来说是非常干净的了,那么,我们需要重新制作一个类似于c+里面的main函数,因为UTGame目录已经被我们咔嚓掉了。他的引用不到。4.1.来到KingdomWorldDevelopmentSrc目录,创建文件夹KWGame,在其创建Classes文件夹4.2.进入KingdomWorldDevelopmentSrcKWGameClasses目录4.3.创建一个KWInfo.uc,键入以下内容1. class KWInfo extends GameInfo;2. DefaultProperties3. 4. /设置角色控制类5. PlayerControllerClass=classKWGame.KWPlayerController6. 复制代码4.创建一个KWPlayerController.uc,键入以下内容1. class KWPlayerController extends GamePlayerController;2. DefaultProperties3. 4. 复制代码第五步我们已完成了创建了我们自己的初始化函数KWInfo和控制类函数KWPlayerController,那么我们需要吧编辑器的引用指向他们。5.1.进入KingdomWorldUTGameConfig目录。5.2.打开DefaultGame.ini文件。找到Engine.GameInfo中的5.2.1.DefaultGame并修改成DefaultGame=KWGame.KWInfo5.2.2.DefaultServerGame并修改成DefaultServerGame=KWGame.KWInfo5.2.3.PlayerControllerClassName并修改成PlayerControllerClassName=KWGame.KWPlayerController第六步在这里,我们基本完成了整个目录的精简,只留下我们需要的部分了,最后,我们需要对整个工程进行优化,去掉不存在和不需要的包的引用。加入我们的引用目录。6.1.进入KingdomWorldUTGameConfig目录。6.2.打开DefaultEngine.ini文件。找到UnrealEd.EditorEngine中的6.2.1.ModEditPackages并修改成ModEditPackages=KWGame(吧ModEditPackages最前面的;去掉)6.2.2.删除+EditPackages=UTGameContent这句6.2.3.找到Windows.StandardUser中的MyDocumentsSubDirName并修改成MyDocumentsSubDirName=KWGame=2010-01-29修改新增=6.3.打开DefaultUI.ini文件。找到Engine.UIInteraction中的6.3.1.UISkinName并修改为UISkinName=DefaultUISkin.DefaultSkin6.4.打开DefaultEngine.ini文件。找到Engine.Engine部分。6.4.1.将Engine.Engine部分改为如下(其实就是吧UTGame改成Engine,并且去掉前缀UT)1. Engine.Engine2. ConsoleClassName=Engine.Console3. EditorEngine=UTEditor.UTEditorEngine4. UnrealEdEngine=UTEditor.UTUnrealEdEngine5. DefaultOnlineSubsystemName=OnlineSubsystemPC.OnlineSubsystemPC6. UseStreaming=True7. ScoutClassName=Engine.Scout8. GameViewportClientClassName=Engine.GameViewportClient9. ;DefaultPostProcessName=FX_HitEffects.UTPostProcess10. bOnScreenKismetWarnings=true11. TimeBetweenPurgingPendingKillObjects=3012. TinyFontName=EngineFonts.TinyFont13. MediumFontName=MultiFontUI_Fonts_Final.HUD.MF_Medium14. LargeFontName=MultiFontUI_Fonts_Final.HUD.MF_Large15. SubtitleFontName=MultiFontUI_Fonts_Final.HUD.MF_Medium16. AllowShadowVolumes=False17. LocalPlayerClassName=Engine.LocalPlayer18. MaxParticleResize=102419. MaxParticleResizeWarn=1024020. ;DemoRecordingDevice=Engine.DemoRecDriver21. bEnableColorClear=TRUE复制代码(例如ConsoleClassName=UTGame.UTConsole改为ConsoleClassName=Engine.UTConsole)6.4.2.找到Engine.DataStoreClient部分删除节点所有文件,新增一行 +PlayerDataStoreClassNames=Engine.UIDataStore_OnlinePlayerData如下:1. Engine.DataStoreClient2. +PlayerDataStoreClassNames=Engine.UIDataStore_OnlinePlayerData复制代码6.4.3.找到Engine.UIDataStore_OnlinePlayerData改为如下(其实就是吧UTGame改成Engine,并且去掉前缀UT)1. Engine.UIDataStore_OnlinePlayerData2. ProfileSettingsClassName=Engine.OnlineProfileSettings3. FriendMessagesProviderClassName=Engine.UIDataProvider_OnlineFriendMessages4. FriendsProviderClassName=Engine.UIDataProvider_OnlineFriends复制代码6.4.4.找到Engine.StartupPackages改为如下1. Engine.StartupPackages2. bSerializeStartupPackagesFromMemory=TRUE3. bFullyCompressStartupPackages=FALSE4. Package=DefaultUISkin5. Package=EngineMaterials6. Package=EngineSounds7. Package=EngineFonts8. Package=EngineBuildings9. -Package=SoundClassesAndModes复制代码6.4.5.找到Engine.PackagesToForceCookPerMap去除所有节点。6.5.打开DefaultGame.ini文件。找到Engine.WorldInfo部分。6.5.1.找到EmitterPoolClassPath并修改为EmitterPoolClassPath=Engine.EmitterPool6.5.2.找到DecalManagerClassPath并修改为DecalManagerClassPath=Engine.DecalManager7.删除KingdomWorldUTGameConfig下所有UT开头的ini文件,并且重新进入编辑器,就会自动生成UT开头的ini了=2010-01-29修改新增=总结:至此,你已经完成UDK目录的精简,并且删除了UTGame的全部内容,在接下来的章节,我会一步步介绍如何在这个精简工程中,全部制作属于自己的东西这时候你打开UDK编辑器,可能需要等待一会的时间,因为他在重新编译一些东西,耐心等待一下就可以了。下一章节预告【跟着楼主做游戏之】建立一个空工程-下建立一个空的VS工程,并且调试KWGame项目。(请大家提前安装vs2008或者vs2005,最好使用vs2008,vs2003是不可以的,因为有个脚本调试插件,他只能在vs2008或者vs2005中运行)另外本文的大部分内容,阅读者最好有一定的编程基础,多以代码为例讲解。UDK入门教程-第一章:第二节 建立一个空工程-下 如果你确定看完了建立一个空工程-上这篇,并且没有问题,那么接着和我学习把。第一步:首先确保机器已经安装vs2008(或者vs2005,以后文章都以vs2008为例),然后安装nFringe(nFringe的最新版/index.php?title=Tools:UnrealScript_Studio:Releases可以在这里找到,目前附件传的是nFringeSetup-1.0.24573.0.msi也是截止发帖时候的最新版,此插件有30天使用限制,我先看大家的下载次数吧,至少30天内我暂时不会公开破解补丁)第二步:2.1.打开VS2008,选择左上角菜单中的【文件】-【新建】-【项目】2.2.选择UnrealEngine 3 Licensees Project2.3.检查【创建解决方案的目录】的勾是否已被去掉。2.4.位置填写为 安装目录:KingdomWorldDevelopmentSrcKWGame2.5.名称为KWGame(注意大小写),点击确定.2.6.打开目录KingdomWorldDevelopmentSrcKWGameKWGame将其所有文件剪切至KingdomWorldDevelopmentSrcKWGame2.7.打开目录KingdomWorldDevelopmentSrcKWGame删除KWGame文件夹(此时里面那个文件夹应该没有文件,都被你剪切到上面了)2.8.打开目录KingdomWorldDevelopmentSrcKWGame使用vs2008打开KWGame.sln工程第三步:3.1.选择左上角菜单中的【项目】-【KWGame 属性】3.2.设置如下参数。General中Game中的Target Game为UnrealEngine 3 ModUCC Path为 安装目录:KingdomWorldBinariesUDK.exeReference Source Path为 安装目录:KingdomWorldDevelopmentSrcBuild中Script Outputs中的Manually set UCC output directory为 安装目录:KingdomWorldUTGameScriptDebug中Start Action中的Start Game Executable为 安装目录:KingdomWorldBinariesUDK.exeLoad map at startup为你的地图文件名,如我们为默认上次没删的EnvyEntry.udk则填写为EnvyEntryStart with speacified game为KWGame.KWInfo勾上Enable unpublished mods勾上Open log window at postions并且设置为0 Left,0 Top第四步:4.1.进入目录KingdomWorldDevelopmentSrcKWGame,将Classes文件夹改名为Classes14.2.在vs2008里选中KWGame工程点击右键,选择【添加】-【新建文件夹】4.3.讲其文件夹名命名为Classes4.4.关闭vs2008,进入目录KingdomWorldDevelopmentSrcKWGame,删除Classes文件夹,将Classes1改名回Classes(因为在上篇文章里这个文件夹下有2个文件,先改名是为了防止vs2008里创建同名文件夹失败)4.5.打开目录KingdomWorldDevelopmentSrcKWGame使用vs2008打开KWGame.sln工程4.6.在vs2008里选中KWGame工程中,选中Classes目录,点击右键,选择【添加】-【添加现有项】选择KingdomWorldDevelopmentSrcKWGameClasses目录下的KWInfo.uc和KWPlayerController.uc(上篇教程中创建)4.7.在vs2008里选中KWGame工程(选择工程路径不是Classes文件夹)点击右键,选择【添加】-【添加现有项】选择KingdomWorldUTGameConfig目录下的DefaultEngine.ini和DefaultGame.ini(特别注意添加文件的时候,在窗体那里添加按钮旁边有个小三角,选择添加为链接)总结:至此,你可以在VS2008中调试你的UDK项目了,在下面章节中,我们将会对这个工程继续讲解。来做一个类似大菠萝的视角的游戏。UDK入门教程-第二章:第一节 创建一个自定义视角的游戏-上在以上的章节中,我们已经创建了一个可以调试的UDK空环境,并且保证除了底层Engine部分,其他的资源都已经剔除掉了,在这里,我们接着开发属于自己的游戏。我们先吧制作好的场景(可以参考其他教程或者等待其他人更新场景制作教程,在此系列就不涉及大部分UDK编辑器部分的操作,本系列留给程序员)放入KingdomWorldUTGameContentMaps中。附带一个我随便制作的场景:进入KingdomWorldDevelopmentSrcKWGame目录,打开KWGame.sln工程。修改工程属性的Debug中Start Action中的Load map at startup为1001(地图名)保存(ctrl+s)好后,我们可以在工程里按下菜单里的【调试】-【启动调试】(F5)来看效果。如果能正确显示如上画面后,代表你的vs工程配置没有问题了。接下来我们需要按下键盘的键,呼出控制台,输入exit并按下回车退出游戏界面要注意的是,这时候虽然游戏关闭了,但是你的VS工程并没有关闭,我们需要点击菜单里的【调试】-【停止调试】(Shift+F5)来停止工程。现在我们在vs工程里双击打开Classes里的KWPlayerController.uc进行编辑。可以发现,我们编写的KWPlayerController类实际上继承了GamePlayerController类。而GamePlayerController类是做什么的呢?(具体我们可以参考API手册,文章末尾的附件)其实是一个角色控制类。这么说吧,比如像在控制台里面的命令,鼠标,键盘的操作,全部都在这个控制类。你可以吧他看成一个Input控制类。所以,当你的鼠标点击的时候,我们可以在这个类里编写代码来实现你需要的功能。在学习写第一个类的时候,我们可以加一小段调试代码,从而观察环境里的这个类是否被运行。3.1.新增一个PostBeginPlay方法1. simulated event PostBeginPlay()2. 3. super.PostBeginPlay();4. Log(角色控制类运行);5. 复制代码新增代码后的效果:我们通过手册可以看到GameFramework.GamePlayerController的父类是Engine.PlayerController而Engine.PlayerController中,则有一个simulated event PostBeginPlay,所以我们可以重写,他也会被自动调用(这是UDK的uc脚本机制)其实追溯源头应该是Engine.Actor,而在此类有一个event PostBeginPlay();在他继承的类中重写,则会被自动调用。而大部分类的主父类都集成了它,基本上类在运行后,都会首次寻找是否有PostBeginPlay方法来执行。你可以吧他看做这个类的构造函数吧。因为重写了他,因为我们并不知道继承的这个类的上面那些乱七八糟类里同样方法里做了一些什么事情,所以我们试用super来调用父类的这个函数。在后面再插入我们自己需要编写的代码。由于我们之前已经在KWInfo.uc里的DefaultProperties方法里,对PlayerControllerClass的指针已经赋值到了我们新做的KWGame.KWPlayerController里。所以这里我们新做的控制类则会被调用。在这里说一下,由于我们在Default.ini里修改的Engine.GameInfo中的DefaultGame指向到KWGame.KWInfo类,那么KWInfo你可以看做整个游戏的main函数。而PlayerControllerClass是默认的用户控制类的指针(其他指针可以参考API,后面也会对一个个指针进行讲解)而我们需要做的就是新建一个类继承他,然后在main里绑定他。现在,我们可以按下F5,看一下左边日志窗口的提示信息。如果你的界面如上图所示,那么你的游戏已经成功调用了KWGame.KWPlayerController类。很激动吧。你已经完成了你的第一个类的编写,并且通过VS已经调试出结果了。还记得我们之前的步骤吗?按下键盘上的键呼出控制台,输入exit,并且在vs里点击停止调试就可以回到我们的界面来继续编码。现在你已经基本搭建好一个良好的UDK编写代码环境了,在下一章节,我们将会继承一个新的Camera类,通过KWInfo来绑定,来实现我们自己的游戏界面的视角。本文附带源码:文章中所说的API手册:http:/www.zY/Unreal+Script+API.rarUDK入门教程-第二章:第二节 创建一个自定义视角的游戏-下在上一章节中,我们对自定义的GamePlayerController类进行了调用,那么接着遨游我们的虚幻之旅吧。第一步:我们先把制作好的角色模型(可以参考其他教程或者等待其他人更新模型制作教程,在此系列就不涉及大部分UDK编辑器部分 的操作,本系列留给程序员)放入KingdomWorldUTGameContentCharactersHeroesAchilles 中。(KingdomWorldUTGameContent后的路径随便你定义,你直接放在Content里也行,这样做的目的仅仅是便于管理而已)附带一个我随便制作的模型:第二步:打开工程。在Classes文件夹里添加一个KWCamera类。并编写如下代码1. class KWCamera extends Camera;2. simulated event PostBeginPlay()3. 4. super.PostBeginPlay();5. Log(摄像机类运行);6. 复制代码我们编写了一个继承了摄像机类的的类,从而完成我们自己的摄像机视角。第三步:找到我们之前编写的KWPlayerController.uc文件,在DefaultProperties内添加一行1. CameraClass=classKWCamera复制代码这里要特别说一下,DefaultProperties可以当做是每个类的函数初始化的地方,这里是不需要分号来换行的通过CameraClass=来赋值指针为我们编写的类从而重载。这时候可以通过F5来调试一下,看看日志窗口Log(摄像机类运行);这句话是否正确执行。在控制台输入exit退出游戏界面,记得在vs里停止工程,我们来做一个出生类。第四步:打开工程。在Classes文件夹里添加一个KWPawn类。并编写如下代码1. class KWPawn extends GamePawn;2. simulated event PostBeginPlay()3. 4. super.PostBeginPlay();5. Log(出生类运行);6. 7.8. simulated function name GetDefaultCameraMode( PlayerController RequestedBy )9. 10. Log(开始获取默认摄像机模式);11. Log(设置为Isometric模式);12. return Isometric;13. 14.15. defaultproperties16. 17. /删除场景内原有的元素18. Components.Remove(Sprite)19. /创建动态环境光照对象-用于InitialSkeletalMesh对象(使用LightEnvironment成员赋值)20. Begin Object Class=DynamicLightEnvironmentComponent Name=InitLightEnvironment21. ModShadowFadeoutTime=0.2522. MinTimeBetweenFullUpdates=0.223. AmbientGlow=(R=.01,G=.01,B=.01,A=1)24. AmbientShadowColor=(R=0.15,G=0.15,B=0.15)25. LightShadowMode=LightShadow_ModulateBetter26. ShadowFilterQuality=SFQ_High27. bSynthesizeSHLight=TRUE28. End Object29.30. /添加进组件库31. Components.Add(InitLightEnvironment)32.33. /创建骨骼模型34. Begin Object Class=SkeletalMeshComponent Name=InitialSkeletalMesh35. CastShadow=true36. bCastDynamicShadow=true37. bOwnerNoSee=false38. /使用组件库里动态创建的环境光照对象InitLightEnvironment39. LightEnvironment=InitLightEnvironment;40. BlockRigidBody=true;41. CollideActors=true;42. BlockZeroExtent=true;43. /物理引擎包44. /PhysicsAsset=PhysicsAssetAchilles_Art.Achilles.Achilles_Full_Apa45. /动画包-序号046. /AnimSets(0)=AnimSetAchilles_Art.Achilles.Achilles_Full_Aas47. /动画模板48. /AnimTreeTemplate=AnimTreeAchilles_Art.Achilles.Achilles_Full_Aat49. /模型文件50. SkeletalMesh=SkeletalMeshAchilles_Art.Achilles.Achilles_Full_Amesh51. End Object52.53. /Mesh来自GamePawn的基类成员(貌似是设置出生角色)54. Mesh=InitialSkeletalMesh;55. /添加进组件库56. Components.Add(InitialSkeletalMesh);57. 复制代码这段代码我说明两个地方。一个是defaultproperties里面的成员,这个我是参考原本的UDK- 2010-01DevelopmentSrcUTGameClassesUTPawn.uc文件复制过来。并且我对如上代码做了相应的注释。由 于我提供的资源包里只有模型文件。所以其他资源的属性我都注释掉了。另外一个是simulated function name GetDefaultCameraMode( PlayerController RequestedBy )这个方法会在Camera启动后调用得到。之所以我传入return Isometric;是因为通过观察KingdomWorldDevelopmentSrcEngineClassesCamera.uc 里面的UpdateViewTarget方法,并没有这么一个字符串,所以我是随便写的,你也可以随便写一个,在后面我们继承的Camera类中,重写 UpdateViewTarget方法取得值来进行处理。所以这里的Isometric你改成xx,yy,bb都可以第五步:找到我们之前编写的KWInfo.uc文件,在DefaultProperties内添加两行1. bDelayedStart=false2. /设置出生类3. DefaultPawnClass=classKWGame.KWPawn复制代码DefaultPawnClass绑定到我们修改的Pawn里,这里不做多说明。特别说明下bDelayedStart成员变量,bDelayedStart来自继承的 GameInfo类(有兴趣的可以去KingdomWorldDevelopmentSrcEngineClassesGameInfo.uc 里看这个变量调用的一些地方做了什么)bDelayedStart 在此刻是非常重要的,因为我们重写了游戏,而不是使用游戏内的Kismet来进行绑定,那么此时游戏内是没有Pawn的,我们需要告诉引擎来调用我们的出 生类,而不是等待,那么,把他设置成False,游戏引擎将不再等待角色的产生,不再延迟而立即产生了我们的Pawn(当然,如果你需要游戏做过场动画或 者摄像机漫游的时候,以及在登陆界面的时候-后面说,可以做一个方法来设置他的值将他设置为True)这时候,我们进行调试,可以发现我们编写的类已经全部正确调用,并且通过键盘的WSAD键进行移动后,发现我们设置的角色已经绑定我们的摄像机一起移动了。第六步:现在我们已经成功了部署整体架构,还记得我们之前的那个Isometric吗?我们现在就得来处理它,完成最后一步,实现自己的摄像机模式。找到我们之前编写的KWCamera.uc文件,对继承的Camera类点右键,选择转到定义。(或者打开KingdomWorldDevelopmentSrcEngineClassesCamera.uc)按下键盘的Ctrl+F找到UpdateViewTarget方法,复制进我们的KWCamera.uc因为我们要在中间部分修改,所以不好直接调用super.UpdateViewTarget()了。找到switch( CameraStyle )部分,添加我们前面定义的那个Isometric的case1. /*2. *自定义摄像机模式开始3. */4. /从自定义的Pawn类(KWPawn)的GetDefaultCameraMode传来5. case Isometric:6. /修改摄像机位置7. Rot.Pitch = (-55.0f *DegToRad) * RadToUnrRot;8. Rot.Roll =(0 *DegToRad) * RadToUnrRot;9. Rot.Yaw = (30.0f *DegToRad) * RadToUnrRot;10.11. /修改摄像机的位置和角色的偏移12. Loc.X = PCOwner.Pawn.Location.X - 64;13. Loc.Y = PCOwner.Pawn.Location.Y - 64;14. Loc.Z = PCOwner.Pawn.Location.Z + 156; /距离位置15. 16. /设置缩放17. Pos = Loc - Vector(Rot) * FreeCamDistance;18. OutVT.POV.Location = Pos;19. OutVT.POV.Rotation = Rot;20. break;21. /*22. *自定义摄像机模式结束23. */复制代码由于复制过来的代码使用了一个成员变量OutVT.POV.FOV = DefaultFOV;所以,在Camera类里,找到赋值他的地方添加进我们重写的KWCamera类里。添加DefaultProperties方法。这样方便我们以后如果对这个值进行修改而不动底层的东西。1. DefaultProperties2. 3. DefaultFOV=90.f4. 复制代码/*UpdateViewTarget()方法介绍*这个类继承了基类的Camera摄像机类.*当这个类创建的时候,则会自动调用基类GamePawn的虚方法GetDefaultCameraMode(需要重载)(ps.其实UE3里,没有虚函数,他们extends后,都属于重写,本身他就有这方法,可以进基类的uc文件看他怎么写的).*如果想自己创建新的摄像机模式,则需要重载GamePawn的GetDefaultCameraMode的方法.*/* Camera Mode */varNameCameraStyle;*Camera类里的CameraStyle成员变量,就是通过GamePawn的GetDefaultCameraMode实现的。(ps.我觉得这个方法名用Set更合适,不过他不是方法,是需要继承的,所以Get也没错)*我在继承的GamePawn类(KWPawn)里返回了Isometric,那么,我们在Camera.uc里,找到UpdateViewTarget方法,将其复制过来(其实也可以不复制,复制的好处是原始的摄像机模式保留)*在switch( CameraStyle )的地方添加对Isometric的处理(Isometric随便定义,不过你怎么case的就在你定义的Pawn里怎么Get*在这个类里可以设置*这是一个可以简单使用且有品质保证的摄像机类上的基本功能,增加或者说是扩展了另一款同等级GameCamera的功能*/我大概说下我的自定义视角里面的代码含义。首先是Rot在这里我们固定摄像机角度进一个或多或少等角的固定角度之内。(Pitch Roll Yaw你可以理解为三个面的旋转方式,就类似UDK里面的旋转三跟线)然后是Loc在这里我们定义一个默认的摄像机位置距离Pawn(我们的角色)的位置。最后是Pos = Loc Vector(Rot) * FreeCamDistance;它做的是以现在的摄像机旋转作为方向矢量然后借着 FreeCamDistance 来加大。FreeCamDistance在父类定义中默认值是 256.0 f。最后,当我们按下F5进行调试,就可以发现我们可以通过键盘的WSAD键来控制角色进行行走了,并且已经固定为斜45度角了。如果你想修改你的视角,那么对Isometric里的代码进行修改。如果你想添加多种视角,那么添加这里的case进行处理,然后在继承了Pawn类的KWPawn类里控制GetDefaultCameraMode的返回值来进行完成。总结:我们已经通过修改完成了使用自己的视角来进行游戏,在下一章节中,我们将重写我们的控制方法,使用鼠标来进行角色的移动。并且初步谈谈关于HUD(界面渲染)。UDK入门教程-第二章:第三节 自定义角色控制方式-上在前面的教程中,我们已经把我们创建的角色放入置我们的场景之中了。现在,我们将重写我们的控制方式,使用我们自定义的方式来控制我们的角色。第一步:我们先把制作好的鼠标指针模型(可以参考其他教程或者等待其他人更新模型制作教程,在此系列就不涉及大部分UDK编辑器 部分的操作,本系列留给程序员)放入KingdomWorldUTGameContentEffect中。(KingdomWorld UTGameContent后的路径随便你定义,你直接放在Content里也行,这样做的目的仅仅是便于管理而已)附带一个我随便制作的模型:第二步:2.1.打开工程。在Classes文件夹里添加一个KWHud类。并编写如下代码1. class KWHud extends GameHUD;2.3. simulated event PostBeginPlay()4. 5. super.PostBeginPlay();6. Log(界面类运行);7. 复制代码我们编写了一个继承了界面类的的类,在这里我们可以在渲染事件里做一些东西(比如UI,文字等)2.2.接着,我们添加一个方法1. function vector2D GetMouseCoordinates()2. 3. local Vector2D mousePos;4. local UIInteraction UIController;5. local GameUISceneClient GameSceneClient;6. UIController= PlayerOwner.GetUIController();7. if ( UIController != None)8. 9. GameSceneClient = UIController.SceneClient;10. if ( GameSceneClient != None )11. 12. mousePos.X = GameSceneClient.MousePosition.X;13. mousePos.Y = GameSceneClient.MousePosition.Y;14. 15. 16. return mousePos;17. 复制代码/*GetMouseCoordinates()方法介绍* 这是我们自己定义的一个方法。* 通过这个方法返回一个vector2D* vector2D包含了我们鼠标在当前场景中的正确位置。* 其实就是PlayerOwner.GetUIController().SceneClient.MousePosition;*/通过这个方法,我们可以随时取得当前鼠标的位置(在后面用到)第三步:找到我们之前编写的KWPlayerController.uc文件 声明如下变量1. var Vector2D PlayerMouse;2. var Vector MouseHitWorldLocation;3. var Vector MouseHitWorldNormal;4. var Vector MousePosWorldLocation;5. var Vector MousePosWorldNormal;6. var vector StartTrace;7. var Vector EndTrace;8. var vector RayDir;9. var Vector PawnEyeLocation;10. var Actor TraceActor;复制代码第四步:4.1.找到我们之前编写的KWHud.uc文件 声明如下变量1. var FontRenderInfoTextRenderInfo; /一个字体渲染类,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论