如何设置UDK开发环境.doc_第1页
如何设置UDK开发环境.doc_第2页
如何设置UDK开发环境.doc_第3页
如何设置UDK开发环境.doc_第4页
如何设置UDK开发环境.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

UDK1. 设置开发环境1) 改成英文编辑器UDKGameConfigUDKEngine.ini CHN-INT2) VS: 先nfringmsi3) 编辑:udkgame/config/defaultengine.ini如果在编译过程中没有监听您的包,那么请确保您是否把它们作为 ModEditPackages 添加到 UTGameConfigUTEngine.ini 文件的 UnrealEd.EditorEngine 部分 2. 看看类:可以发现,我们编写的KWPlayerController类实际上继承了GamePlayerController类。而GamePlayerController类是做什么的呢?(具体我们可以参考API手册,文章末尾的附件)其实是一个角色控制类。这么说吧,比如像在控制台里面的命令,鼠标,键盘的操作,全部都在这个控制类。你可以吧他看成一个Input控制类。所以,当你的鼠标点击的时候,我们可以在这个类里编写代码来实现你需要的功能。在学习写第一个类的时候,我们可以加一小段调试代码,从而观察环境里的这个类是否被运行。新增一个PostBeginPlay方法simulated event PostBeginPlay()super.PostBeginPlay();Log(角色控制类运行);基本上,可以看做是构造方法,每个类运行后,都会首次寻找PostBeginPlay();3. 编译和运行在DefaultEngine.ini UnrealEd.EditorEngine+EditPackages=UTGame+EditPackages=UTGameContent+ModEditPackages=TGTGame = 控制编译的编译可用VS,设置正确的工程属性(UDKProject)General -Target Game:UnrealEngine 3 Mod-ucc path: .win32udk.exeReference source path:.developmentsrcBuildadditional option : -fullDebug:Start Game Executable .win32udk.exeLoad map at startup: .(加载的地图)Enable unpublished mods,Open log window at position :0,0运行:在VS中,可用上面的方法,注意load map的设置 或 frontend launch在DefaultGame.ini中:Engine.GameInfoDefaultGame=UDKBase.SimpleGameDefaultServerGame=UDKBase.SimpleGamePlayerControllerClassName=UDKBase.SimplePC这里控制classGameDifficulty=+1.0MaxPlayers=32DefaultGameType=TGTGame.TGTGameInfo; 或DefaultGameType=UTGame.UTDeathmatch;VS:LoadMap: ExampleMap?Name=Player?Team=255?class=TGTGame.TGTPawn等价于udk.exe LoadMap: ExampleMap?Name=Player?Team=255?class=TGTGame.TGTPawn上面的两行有问题啦!看看官网的:大多数情况下,我们通过使用给定的启动URL在客户端模式下启动UDK。要想启动 CluOne ,UDK应该使用以下命令启动: C:UDKUDK-2009-11BinariesWin32udk ExampleMap?game=CluOne.CluOneGame在这个实例中,启动URL是 ExampleMap?game=CluOne.CluOneGame。URL以一个地图(在这个实例中是 ExampleMap )或者以要连接到的服务器的 主机/ip 来开始启动。在这后面是一组?key=value元素,这些元素控制各种设置。最重要的 key 是 game ,它定义了当启动游戏时创建哪个 GameInfo 子类。Value(值)是类的完整名称,也就是 PackageName.ClassName 。其它的有效的 ?key=value 元素通常由创建的 GameInfo 来决定的。 这里使用 ExampleMap 是因为它是一个小地图,所以它加载很快。4. DefaultGame.iniEngine.GameInfoDefaultGame=UDKBase.SimpleGame /相当于main()函数DefaultServerGame=UDKBase.SimpleGamePlayerControllerClassName=UDKBase.SimplePC/默认的用户控制类指针GameDifficulty=+1.0MaxPlayers=32DefaultGameType=TGTGame.TGTGameInfo;+DefaultMapPrefixes=(Prefix=DM,bUsesCommonPackage=FALSE,GameType=UTGame.UTDeathmatch)+DefaultMapPrefixes=(Prefix=CTF,bUsesCommonPackage=FALSE,GameType=UTGameContent.UTCTFGame_Content)+DefaultMapPrefixes=(Prefix=VCTF,bUsesCommonPackage=FALSE,GameType=UTGameContent.UTVehicleCTFGame_Content)5. 在GameInfo.PlayerController,Pawn中defaultproperties中:这里要特别说一下,DefaultProperties可以当做是每个类的函数初始化的地方,这里是不需要分号来换行的通过CameraClass=来赋值指针为我们编写的类从而重载6. 如果添加摄像机类1)定义TGTCamera.ucclass KWCamera extends Camera;simulated event PostBeginPlay()super.PostBeginPlay();Log(摄像机类运行); 2) 在PlayerController中DefaultProperties内添加一行CameraClass=classKWCamera7. 写一段Pawn类class KWPawn extends GamePawn;simulated event PostBeginPlay()/构造函数super.PostBeginPlay();Log(出生类运行);simulated function name GetDefaultCameraMode( PlayerController RequestedBy )Log(开始获取默认摄像机模式);Log(设置为Isometric模式);return Isometric;defaultproperties/删除场景内原有的元素Components.Remove(Sprite)/创建动态环境光照对象-用于InitialSkeletalMesh对象(使用LightEnvironment成员赋值)Begin Object Class=DynamicLightEnvironmentComponent Name=InitLightEnvironmentModShadowFadeoutTime=0.25MinTimeBetweenFullUpdates=0.2AmbientGlow=(R=.01,G=.01,B=.01,A=1)AmbientShadowColor=(R=0.15,G=0.15,B=0.15)LightShadowMode=LightShadow_ModulateBetterShadowFilterQuality=SFQ_HighbSynthesizeSHLight=TRUEEnd Object/添加进组件库Components.Add(InitLightEnvironment)/创建骨骼模型Begin Object Class=SkeletalMeshComponent Name=InitialSkeletalMeshCastShadow=truebCastDynamicShadow=truebOwnerNoSee=false/使用组件库里动态创建的环境光照对象InitLightEnvironmentLightEnvironment=InitLightEnvironment;BlockRigidBody=true;CollideActors=true;BlockZeroExtent=true;/物理引擎包/PhysicsAsset=PhysicsAssetAchilles_Art.Achilles.Achilles_Full_Apa/动画包-序号0/AnimSets(0)=AnimSetAchilles_Art.Achilles.Achilles_Full_Aas/动画模板/AnimTreeTemplate=AnimTreeAchilles_Art.Achilles.Achilles_Full_Aat/模型文件SkeletalMesh=SkeletalMeshAchilles_Art.Achilles.Achilles_Full_AmeshEnd Object/Mesh来自GamePawn的基类成员(貌似是设置出生角色)Mesh=InitialSkeletalMesh;/添加进组件库Components.Add(InitialSkeletalMesh);8. 看看 defaultproperties中的bDelayStart变量bDelayedStart成员变量,bDelayedStart来自继承的GameInfo类(有兴趣的可以去KingdomWorldDevelopmentSrcEngineClassesGameInfo.uc里看这个变量调用的一些地方做了什么)bDelayedStart 在此刻是非常重要的,因为我们重写了游戏,而不是使用游戏内的Kismet来进行绑定,那么此时游戏内是没有Pawn的,我们需要告诉引擎来调用我们的出生类,而不是等待,那么,把他设置成False,游戏引擎将不再等待角色的产生,不再延迟而立即产生了我们的Pawn(当然,如果你需要游戏做过场动画或者摄像机漫游的时候,以及在登陆界面的时候-后面说,可以做一个方法来设置他的值将他设置为True)9. 最简单的三个基础类My1GameInfo.ucclass My1GameInfo extends GameInfo;DefaultProperties/设置角色控制类PlayerControllerClass=classMy1Game.My1PlayerControllerMy1PlayerController.ucclass My1PlayerController extends GamePlayerController;DefaultPropertiessimulated event PostBeginPlay()super.PostBeginPlay();Log(My1角色控制类运行);My1Pawn.ucclass My1Pawn extends GamePawn;simulated event PostBeginPlay()/构造函数super.PostBeginPlay();Log(My1出生类运行);DefaultProperties10. GameHUD类1)class My1Hud extends GameHUD;simulated event PostBeginPlay()super.PostBeginPlay();Log(界面类运行);一个继承了界面类的的类,在这里我们可以在渲染事件里做一些东西(比如UI,文字等)2)添加一些方法 鼠标function vector2D GetMouseCoordinates()local Vector2D mousePos;local UIInteraction UIController;local GameUISceneClient GameSceneClient;UIController = PlayerOwner.GetUIController();if ( UIController != None)GameSceneClient = UIController.SceneClient;if ( GameSceneClient != None )mousePos.X = GameSceneClient.MousePosition.X;mousePos.Y = GameSceneClient.MousePosition.Y; return mousePos;vector2D包含了我们鼠标在当前场景中的正确位置。* 其实就是PlayerOwner.GetUIController().SceneClient.MousePosition;通过这个方法,我们可以随时取得当前鼠标的位置(在后面用到)3)找到我们之前编写的KWPlayerController.uc文件 声明如下变量var Vector2D PlayerMouse;var Vector MouseHitWorldLocation;var Vector MouseHitWorldNormal;var Vector MousePosWorldLocation;var Vector MousePosWorldNormal;var vector StartTrace;var Vector EndTrace;var vector RayDir;var Vector PawnEyeLocation;var Actor TraceActor;4)找到我们之前编写的KWHud.uc文件 声明如下变量var FontRenderInfo TextRenderInfo; /一个字体渲染类,可以控制他修改字体5)添加如下方法function DrawHUD()/定义一个字符串常量local string StringMessage;/显示我们控制类的当前鼠标位置指向的何种类对象/(TraceActor在PostRender方法中已赋值)if(KWPlayerController(PlayerOwner).TraceActor != none)/将类名赋值给StringMessage/在这里我们可以判断当前选中了何种类型的对象/对不同的对象可以做不同的响应处理/当然,如果鼠标点击到不同的对象,一样可以通过他取得。/以后的教程中我们将介绍如何渲染中文字体。StringMessage = Select Actor:KWPlayerController(PlayerOwner).TraceActor.class;/把StringMessage的内容渲染进x=250,y=10的位置Canvas.DrawColor = MakeColor(255,183,11,255);Canvas.SetPos( 250, 10 );Canvas.DrawText( StringMessage, false, , , TextRenderInfo );复制代码/* DrawHUD()方法介绍* 自定义渲染方法,我们在这里可以渲染一切我们像要的东西。*/6)添加如下方法event PostRender()local KWCamera PlayerCam;local KWPlayerController IsoPlayerController;super.PostRender();/取得我们角色当前的控制类的指针IsoPlayerController = KWPlayerController(PlayerOwner);/将我们定义的GetMouseCoordinates方法的返回值保存进PlayerMouse变量中IsoPlayerController.PlayerMouse = GetMouseCoordinates();/这个方法可以在Engine.Canvas类中找到。这个方法的用途是传入一个2D坐标获得他在场景中的3D位置和方向。Canvas.DeProject(IsoPlayerController.PlayerMouse, IsoPlayerController.MousePosWorldLocation, IsoPlayerController.MousePosWorldNormal);/去的当前空指针的摄像机指针PlayerCam = KWCamera(IsoPlayerController.PlayerCamera);/设置RayDir为当前控制类的方向IsoPlayerController.RayDir = IsoPlayerController.MousePosWorldNormal;/设置StartTrace为当前摄像机位置+100(z轴)位置+控制类的方向*10IsoPlayerController.StartTrace = (PlayerCam.ViewTarget.POV.Location + vect(0,0,100) + IsoPlayerController.RayDir * 10;/设置EndTrace为StartTrace+控制类的方向*5000(5000是作为延伸,够远了)IsoPlayerController.EndTrace = IsoPlayerController.StartTrace + IsoPlayerController.RayDir * 5000;/取得当前鼠标在场景中指向的对象。/Trace需要传入指针方向,起始位置和结束位置/之所以之前传个*5000的EndTrace,是为了鼠标指在模型上,好判断/这个方法会返回一个MouseHitWorldLocation,也就是鼠标点击的这个对象的3D位置(我们暂时用不到他)/在这里我们每帧都跟踪 MouseHitWorldLocation 的世界坐标/(这里你能追踪 Actor对象 的碰撞,为了这个简单教程,我们没有对结果做任何改动,但如果你想过滤掉对地形的点击/,或玩家点击npc,你可以检查 StartFire 函数里的对象碰撞,在那边做处理-后面有说IsoPlayerController.TraceActor = Trace(IsoPlayerController.MouseHitWorldLocation, IsoPlayerController.MouseHitWorldNormal, IsoPlayerController.EndTrace, IsoPlayerController.StartTrace, true);/计算角色的视角位置为了调试光线和检查移动后的碰撞IsoPlayerController.PawnEyeLocation = Pawn(PlayerOwner.ViewTarget).Location + Pawn(PlayerOwner.ViewTarget).EyeHeight * vect(0,0,1);/开始渲染我们的东西DrawHUD();PostRender是来自父类的方法,我们重写后,super.PostRender();了他,然后我们才可以继续做我们自己的事情,这个方法作为渲染类,他每一帧都会执行一次。在这里,我们主要是为了取得TraceActor(当前指针摸到的对象),以及选择范围(StartTrace,EndTrace)后面略去了,详见“跟着楼主做游戏 之 二章三节上11. 获取鼠标的方法:UDN - Three DevelopmentKitGemsCreatingAMouseInterfaceCH和13节中的介绍12. 如果接管输入- DefaultInput.ini Engine.PlayerInput中的Bindings=(Name=MouseScrollUp,Command=PrevWeapon)Bindings=(Name=MouseScrollDown,Command=NextWeapon)这里我特别说明一下UTInput.ini 里,引擎会通过他,找到相应的映射控制方法。Name=MouseScrollUp为底层方法,这是一个鼠标滚轮移动事件。Command=PrevWeapon后面这个为这个事件将会对应的控制台命令。在这里,你可以找到一切你所需要的消息映射,比如键盘的按键,鼠标的。以及Xbox 360中按键的映射更改Command后为事件名(如:MouseScrollup),然后在PlayerController中定义相对应函数exec function MouseScrollUp()Log(拉近镜头);PlayerCamera.FreeCamDistance -= 64;/拉远镜头exec function MouseScrollDown()Log(拉远镜头);PlayerCamera.FreeCamDistance += 64;13. 启动动画 引擎启动后,它会显示一系列启动动画。这其中通常包括“虚幻制造”动画、“Epic Games”动画等等,同时还可以添加一些其他的动画。启动动画是由在 DefaultEngine.ini 的 FullScreenMovie 部分中指定的 StartupMovies 数组指定的全屏视频 (.bik)。 FullScreenMovie+StartupMovies=UDKFrontEnd.udk_loading还有一个地图加载转换过程,即从一个地图进入另一个地图时,过场动画+LoadMapMovies=UDKFrontEnd.udk_loading14. 入口地图 在游戏开始时加载的地图可以通过命令行指定,如果没有指定要加载的地图,那么加载默认地图

温馨提示

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

评论

0/150

提交评论