-
UDK
入门教程
--
第
一章:第一节
建立一个空工程
-
p>
上
第一步:
<
/p>
首先,我们从
主页下载最新版(此文以<
/p>
UDK-2010-01
版为例)
p>
安装完成后,我们找到
UDK-2010-01
文件夹,对其复制粘贴创建一个副本,将目录名改成你喜欢的名字,比如我创建
为<
/p>
KingdomWorld
,以后文章都以
KingdomWorld
为例。
(
以下步骤将对其进行大量修改,创建副本的目的是为了保留原版
)
第二步
2.1.
进入
KingdomWorldDevelopm
entSrc
目录,找到
UTGameContent
文件夹将其全部删除。
2.2.
进入
KingdomWorldDevelopmentSrcUTGame
目录,
删除
以
及
Classes
文件夹下面的所有文件,
但
是保留
Classes
文件夹。
2.3.
进入
KingdomWorldDevelopmentSrcUTGameClasses
目录,创建一个
do_not_
,键入以下内容
1.
class
do_not_delete extends object;
2.
defaultproperties
3.
{
4.
}
复制代码
创建此文件的目的是因为让
UTGame
目录顺利编译成
p>
UTGame.u
文件,
因为
UDK
免费版的原因,
启动编辑器和游戏
他会自动寻找
UTGame.u
文件,所以此包无
法全部删除(除非你有源代码级授权,就可以修改
UTGame
目录指向)
第三步
进入
KingdomWorldUTGameContent
目录,删除所有文件
文件和
Kingdo
mWorldUTGameContentUIUI_Fonts_
文件除外,这两个是
系统需要的底层
pak
包,字体和空
场景,最好别删。
第四步
由
于我们已经删除了所有关于原始的
UTGame
的资源和代码文
件,
现在的文件夹已经相对于来说是非常干净的了,
那
么,我们需要重新制作一个类似于
c++
里面的
main
函数,因为
UTGame
p>
目录已经被我们咔嚓掉了。他的引用不到。
4.1.
来到
KingdomWorldDevelopme
ntSrc
目录,创建文件夹
KWGame,
< br>在其创建
Classes
文件夹
4.2.
进入
KingdomWorl
dDevelopmentSrcKWGameClasses
目录
4.3.
创建一个
,键入以下内容
1.
class KWInfo
extends GameInfo;
2.
3.
4.
5.
6.
DefaultProperties
{
//
设置角色控制类
PlayerControllerClass=class'erController'
}
复制代码
4.
创建一个
,键入以下内容
1.
class
KWPlayerController extends
GamePlayerController;
2.
DefaultProperties
3.
{
4.
}
复制代码
第五步
我们已完成了创建了我们自己
的初始化函数
KWInfo
和控制类函数
KWPlayerController,
那么我们需要吧编辑器的引用
指向他们。
5.1.
进入
KingdomWorldUTGameConfig
目录。<
/p>
5.2.
打
开
文件。找到
[fo]
中的
tGame
并修改成<
/p>
DefaultGame=
tServerGame
并修改成
DefaultServerGame=
ControllerClassName
并修改成
Play
erControllerClassName=erController
第六步
在这里,我们基本完成了整个
目录的精简,只留下我们需要的部分了,最后,我们需要对整个工程进行优化,去掉不
存
在和不需要的包的引用。加入我们的引用目录。
6.1.
p>
进入
KingdomWorldUTGameConfig
目录。
6.2.<
/p>
打开
文件。找到
[Engine]
中的
tPacka
ges
并修改成
ModEditPackages=KWGam
e(
吧
ModEditPackages
最前面的
;
去掉
)
6.2.2.
删除
+EditPackages=UT
GameContent
这句
6.2
.3.
找到
[rdUser]
中的
p>
MyDocumentsSubDirName
并修改成
MyDocumentsSubDirName=KWGame
========2010-01-29
修改新增
==============
6.3.
打开
文件。找到
[raction]
< br>中的
Name
并修改为
UISkinName=tSkin
6.
4.
打开
文件。找到
< br>[]
部分。
6.4.1.
p>
将
[]
部分改为如下
(
其实就是吧
UTGame
改成
p>
Engine,
并且去掉前缀
UT)
1.
[]
2.
ConsoleClassName=e
3.
EditorEngine=orEngine
4.
UnrealEdEngine=alEdEngine
5.
DefaultOnlineSubsystemName=SubsystemPC
6.
UseStreaming=True
7.
ScoutClassName=
8.
GameViewportClientClassNa
me=ewportClient
9.
;DefaultPostProcessName=FX_Process
10. bOnScreenKismetWarnings=true
11.
TimeBetweenPurgingPendingKillObjects=30
12. TinyFontName=nt
13.
MediumFontName=MultiFont'UI_Fonts__Medium'
14.
LargeFontName=MultiFont'UI_Fonts_..MF_Large'
15.
SubtitleFontName=MultiFont'UI_Fonts__Medium'
16. AllowShadowVolumes=False
17. LocalPlayerClassName=layer
18. MaxParticleResize=1024
19. MaxParticleResizeWarn=10240
20. DemoRecordingDevice=cDriver
21. bEnableColorClear=TRUE
复制代码
(
例如
ConsoleClassName=ole
改为
ConsoleClassName=ole)
6.4.2.
找到
[oreClient]
部分删除节点所有文件,新增一行
+PlayerD
ataStoreClassNames=Store_OnlinePlayerData
如下:
1.
[oreClient]
2.
p>
+PlayerDataStoreClassNames=Store_OnlinePl
ayerData
复制代码
p>
6.4.3.
找到
[Store_Onli
nePlayerData]
改为如下
(
其实就是吧
UTGame
改成
Eng
ine,
并且去掉前缀
UT)
1.
[Store_OnlinePlayerData]
2.
ProfileSettingsClassName=
ProfileSettings
3.
FriendMes
sagesProviderClassName=Provider_OnlineFriendMessag
es
4.
FriendsProviderClassNa
me=Provider_OnlineFriends
复制代码
6.4.4.
找到
[pPackages]
改为如下
1.
[pPackages]
2.
3.
4.
5.
6.
7.
8.
9.
bSerializeStartupPackages
FromMemory=TRUE
bFullyCompressStartupPackages=FALSE
Package=DefaultUISkin
Package=EngineMaterials
Package=EngineSounds
Package=EngineFonts
Package=EngineBuildings
-Package=SoundClassesAndModes
复制代码
6.4.5.
找到
[esToForceCookPerMap
]
去除所有节点。
6.5.
打开
文件。找到
p>
[nfo]
部分。
6.5.1.
找到
EmitterPoolClassPat
h
并修改为
EmitterPoolClassPath=
p>
6.5.2.
找到
DecalManage
rClassPath
并修改为
DecalManagerCl
assPath=
7.
删除
KingdomWorldUTGameConfig
下所有
UT
开头的
ini
文件,
并且重新进入编辑器,
就会自动生成
U
T
开头的
ini
了
========2010-01-29
修改新增
==============
总结:
至此,你已经完成
UDK
目录的精简,并且删除了
UTGame
p>
的全部内容,在接下来的章节,我会一步步介绍如何在这
个精简工程
中,全部制作属于自己的东西
这时候你打开
< br>UDK
编辑器,可能需要等待一会的时间,因为他在重新编译一些东西,耐心等待
一下就可以了。
下一章节预告【跟
着楼主做游戏之】《建立一个空工程
-
下》建立一个空的
VS
工程,并且调试
KWGame
项目。
(请大家提前安装
vs2008
或者
vs2005
,最
好使用
vs2008
,
vs2003<
/p>
是不可以的,因为有个脚本调试插件,他只能在
vs2008
p>
或者
vs2005
中运行)
另外本文的大部分内容,阅读者最好有一定的编程基础,多以代码为例讲解。
p>
UDK
入门教程
--
第一章:第二节
建立一个空工程
-
下
如果你确定看完了
《建立一个空工程
-
上》
这篇,并且没有问题,那么接着和我学习把。
第一步:
首先确保机器已经安装
vs2008(
或者
vs2005
,以后文章都以
vs2008
为例
),
然后安装
nFrin
ge
(nFringe
的最新版
/?
title=Tools:UnrealScript_Studio:Releases
可以在这里找到
,
目
前附件传的是<
/p>
也是截止发帖时候的最新版,此插件有
3
0
天使用限制,我先看大家的下载次数吧,至少
30
天内我暂时不会公开破解补丁
)
第二步:
2.1.
< br>打开
VS2008
,选择左上角菜单中的【文件】
--
【新建】
--
【
项目】
2.2.
选择
UnrealEngine 3 Licensees Project
2.
3.
检查【创建解决方案的目录】的勾是否已被去掉。
2.4.
位置填写为
安装目录
:KingdomWorldDevelopmentSrcKWGa
me
2.5.
名称为
KWGame(
注意大小写
),
点击确定
.
2.6.
打开目录
Ki
ngdomWorldDevelopmentSrcKWGameKWGame
将其所
有文件剪切至
KingdomWorldDevelopmentSrcKWGame
2.7.
打开目录
KingdomWo
rldDevelopmentSrcKWGame
删除
KWG
ame
文件夹
(
此时里面那个文件夹应
该没有文件,都被你剪切到上面
了
)
2.8.
打开目录
KingdomWorldDevelopm
entSrcKWGame
使用
vs2008
< br>打开
工程
第三步:
3.1.
选择左上角菜单中的【项目】
--
【
KWGame
属性】
3.2.
设置如下参数。
General
中
Game
中的
Target
Game
为
UnrealEngine 3 Mod
UCC Path
为
安装目录
:
Reference
Source Path
为
安装目录
:KingdomWorldDevelopmentSrc
Build
中
Script
Outputs
中的
Manually set UCC
output directory
为
安装目录
:KingdomWorldUTGameScript
Debug
中
Start
Action
中的
Start Game
Executable
为
安装目录
:
Load map at
startup
为你的地图文件名,如我们为默认上次没删的
<
/p>
则填写为
EnvyEntry
Start with speacified
game
为
勾上
Enable unpublished mods
勾上
Open log window at
postions
并且设置为
0 Left,0 Top
第四步:
4.1.
进入目录
KingdomWorldDevelopm
entSrcKWGame
,将
Classes
文件夹改名为
Classes1
4.2.
在
vs2008
里选中
K
WGame
工程点击右键,选择【添加】
--
< br>【新建文件夹】
4.3.<
/p>
讲其文件夹名命名为
Classes
4
.4.
关闭
vs2008
,进入目录<
/p>
KingdomWorldDevelopmentSrcKWGame
< br>,删除
Classes
文件夹,将
Classes1
改名回
Classes
< br>(
因为在上篇文章里这个文件夹下有
2
< br>个文件,先改名是为了防止
vs2008
里创建同名文件
夹失败
)
4.5.
打开目录
KingdomWorldDevelopmentSrcKWGame
使用
vs2008
打开
工程
4.6.
在
vs2008
里选中
KWGame
工程中,选中
Classes
目录,点击右键,选择【
添加】
--
【添加现有项】
选择
KingdomWorldDevelopmentSrcKWGa
meClasses
目录下的
和
(上篇教程中创建)
4.7.
在
vs2008
里选中
KWGame
工程
(
选择工程路径不是
Classes<
/p>
文件夹
)
点击右键,选择【添加】
--
【添加现有项】
选择
KingdomWorldUTGameConfig
目
录下的
和
(<
/p>
特别注意添加文件的时候,
在窗体那里添加按钮旁
边有个小三角,选择添加为链接)
总结:
至此,你可以在
VS2008
中调试你的
UDK
项目了,在下面章节中,我们将会对这个工程继续讲解。来做一个类似大菠萝的视角的游戏。
UDK
入门教程
--
第二章:第一节
创建一个自定义视角的游戏
-
上
在以上的章节中,我们已经创建了一个可以调试的
< br>UDK
空环境,并且保证除了底层
Engine
部分,其他的资源都已经剔除掉了,在这里,
我们接着开发属于自己的游
戏。
我
们先吧制作好的场景(可以参考其他教程或者等待其他人更新场景制作教程,在此系列就不涉及大部分
UDK
编辑器部分的操作,本系
列留给程序员)放
入
KingdomWorldUTGameContentMaps
中。
附带一个我随便制作的场景:
p>
进入
KingdomWorldDevelopmentSrcKW
Game
目录,打开
工程。
修改工程属性的
Debug
中
Start
Action
中的
Load map at startup<
/p>
为
1001(
地图名
)
保存
(ctrl+s)
p>
好后,我们可以在工程里按下菜单里的【调试】
--
【启动调试】
(F5)
来看效果。
如果能正确显示如上画面后,代表你的
vs
工程配置没有问题了。
接下来我们需要按下键盘的
键,呼出控制台,输入
exit
并按下回车退出游戏界面
要注意的是,这时候虽然游戏关闭了,但是你的
VS
工程并没有关闭,
我
们需要点击菜单里的【调试】
--
【停止调试】
(Shift+F5)
来停止工程。
现在我们在
vs
工程里双击打开
Classes
里的
进行编辑。
可以发现,我们编写的
KWPlayerController
类实际上继承了
GamePlayerController
类。
而
GamePlayerCo
ntroller
类是做什么的呢?(具体我们可以参考
API
手册
,
文章末尾的附件)
其实是一个角色控制类。这么说吧,比如像在控制台里面的命令,鼠标,键
盘的操作,全部都在这个控制类。
你可以吧他看成一个
Input
控制类。
所以,当你的鼠标点击的时候,我们可以在这个类里编写代码来实现你需要的功能。
在学习写第一个类的时候,我们可以加一小段调试代码,从而观察环境里的这个类是否被
运行。
3.1.
新增一个
PostBeginPlay
方法
1.
simulated
event PostBeginPlay()
2.
3.
4.
5.
{
ginPlay();
`Log(
角色控制类运行
}
复制代码
新增代码后的效果:
我们通过手册可以看到
ayerController
的父类是
Controller
而
Controller
中,则有一个
simulated
event
PostBeginPlay
,所以我们可以重写,他也会被自动调用
(
这是
UDK
的
uc
脚本
机制
)
其实追溯源头应该是
,而在此类有一个
event PostBeginP
lay();
在他继承的类中重写,则会被自动调用。
而大部分类的主父类都集成了它,基本上类在运行后,都会首次寻找是否有
PostBeginPlay
方法来执行。你可以吧他看做这个类的构造函
数吧。
因为重写了他,因为我们并不知道继承
的这个类的上面那些乱七八糟类里同样方法里做了一些什么事情,所以我们试用
supe
r
来调用父类
的这个函数。在后面再插入我们自己需要编写的代
码。
由
于
我
们
之
前
p>
已
经
在
里
的
DefaultProperties
方
法
里
,
对
PlayerControllerClass
的
指
针
已
经<
/p>
赋
值
到
了
我
们
新
做
的
erController
里。所以这里我们新
做的控制类则会被调用。
在这里说一下,由于我们在
里修改的
[fo]
中的
DefaultGame
指向到
类,那么
KWInfo
你可以
看做整个游戏的
main
函数。
而
PlayerControllerClass
是默认的用户控制类的指针
(
其他指针可以参考
API
,后面也会对一个个指针进行讲解)
而我们需要做的就是新建一个类继承他,然后在
main
里绑定他。
现在,我们可以按下
p>
F5
,看一下左边日志窗口的提示信息。
如果你的界面如上图所示,那么你的游戏已经成功调用了
p>
erController
类。
很激动吧。你已经完成了你的第一个类的编写,并且通过
VS
已经调试出结果了。
还记得我们之前的步骤吗?
按下键盘上的
键呼出控制台,输入
ex
it
,并且在
vs
里点击停止调试就可
以回到我们的界面来继续编码。
现
在你已经基本搭建好一个良好的
UDK
编写代码环境了,在下一
章节,我们将会继承一个新的
Camera
类,通过
KWInfo
来绑定,来实
现我们自己的游戏界面
的视角。
本文附带源码:
文章中所说的
API
手册:
/Unreal+Script+
UDK
入
门教程
--
第二章:第二节
创建一个自定义视角的游戏
-
下
在上一章节中,我们对自定义的
GamePlaye
rController
类进行了调用,那么接着遨游我们的虚幻之旅吧。
第一步:
我们先把制作好的角色模型(可以参考其他教程或者等待其他人更新模型制作教程,在此系列就不涉 及大部分
UDK
编辑器部分
的操作,
本系列留给程序员)
放入
KingdomWorldUTGameContentCharactersHeroesAchi
lles
中。
(KingdomWorldUTGameCo
ntent
后的路径
随便你定义,你直接放在
< br>Content
里也行,这样做的目的仅仅是便于管理而已)
附带一个我随便制作的模型:
第二步:
打开工程。在
Classes
文件夹里添加一个
KWCamera
类。并编写如下代码
1.
class KWCamera
extends Camera;
2.
3.
4.
5.
6.
simulated event
PostBeginPlay()
{
ginPlay();
`Log(
摄像机类运行
}
复制代码
我们编写了一个继承了摄像机类的的类,从而完成我们自己的摄像机视角。
第三步:
找到我们之前编写的
文件,在
Defa
ultProperties
内添加一行
1.
CameraClass=class'KWCamera'
复制代码
这里要特别说一下,
DefaultProperties
可以
当做是每个类的函数初始化的地方,这里是不需要分号来换行的
通过
CameraClass=
来赋值指针为我们编写的类从
而重载。
这时候可以通过
F5
来调试一下,看看日志窗口
`Log(
p>
摄像机类运行
这句话是否正确执行。
在控制台输入
e
xit
退出游戏界面,记得在
vs
里停
止工程,我们来做一个出生类。
第四步:
打开工程。在
Classes
文件夹里添加一个
KWPawn
p>
类。并编写如下代码
1.
class KWPawn
extends GamePawn;
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
simulated event
PostBeginPlay()
{
ginPlay();
`Log(
出生类运行
}
simulated function name
GetDefaultCameraMode( PlayerController RequestedBy
)
{
`Log(
开始获取默认摄像机模式
`Log(
设置为
Isometric
模式
return 'Isometric';
}
defaultproperties
{
//
删除场景内原有的元素
(Sprite)
//
创建
动态环境光照对象
--
用于
Initi
alSkeletalMesh
对象
(
使用
LightEnvironment
成员赋值
)
Begin Object
Class=DynamicLightEnvironmentComponent
Name=InitLightEnvironment
ModShadowFadeoutTime=0.25
MinTimeBetweenFullUpdates=0.2
AmbientGlow=(R=.01,G=.01,B=.01,A=1)
AmbientShadow
Color=(R=0.15,G=0.15,B=0.15)
LightShadowMode=LightShado
w_ModulateBetter
ShadowFilterQuality=SFQ_High
bSynthesizeSHLight=TRUE
End Object
//
添加进组件库
(InitLightEnvironment)
//
创建骨骼模型
Begin
Object Class=SkeletalMeshComponent
Name=InitialSkeletalMesh
CastShadow=true
bCastDynamicShadow=true
bOwnerNoSee=false
//
使用组件库里动态创建的环境
光照对象
InitLightEnvironment
LightEnvironment=InitLightEnvironment;
BlockRigidBody=true;
CollideActors=true;
BlockZeroExtent=true;
//
物理引擎包
//PhysicsAsse
t=PhysicsAsset'Achilles_es_Full_Apa'
//
动画包
--
序号
0
//AnimSets(0)=AnimSet'Achi
lles_es_Full_Aas'
//
动画模板
//AnimTreeTem
plate=AnimTree'Achilles_es_Full_Aat'
//
模型文件
SkeletalMesh=
SkeletalMesh'Achilles_es_Full_Amesh'
End Object
//Mesh
< br>来自
GamePawn
的基类成员
(
貌似是设置出生角色
)
Mesh=InitialSkeletalMesh;
//
添加进组件库
(InitialSkeletalMesh);
}
复制代码
这段代码我说明两个地方。
一个是<
/p>
defaultproperties
里面的成员,这个我是参考
原本的
UDK-
文件复制过
来。并且
我对如上代码做了相应的注释。由
于我提供的资源包里只有模
型文件。所以其他资源的属性我都注释掉了。
另外一个是
simulated function name
GetDefaultCameraMode( PlayerController RequestedBy
)
这个方法会在
Camera
启动后
调用得到。
之所以我传入
return
'Isometric';
是因为通过观察
< br>里面的
UpdateViewTarget
方法,并没有
这么一个字符串,所以我是随便写的,你也可以随便写一个,在后面我们继承的
Came
ra
类中,重写
UpdateVie
wTarget
方
法取得值来进行处理。所以这里的
'Isometric'
你改成
'xx','yy
','bb'
都可以
第五步:
找到我们之前编写的
文件,在
DefaultPropertie
s
内添加两行
1.
bDelayedStart=false
2.
//
设置出生类
3.
DefaultPawnClass=class''
复制代码
DefaultPawnClass
绑定到我们修改的
Pawn
里,这里不做多说明。
特别说明下
bDelayedStart
成员变量
,bDelayedStart
来自继承的
GameInfo
类(有兴趣的可以去
里看这个变量调用的一些地方做了什么)
bDelayedSt
art
在此刻是非常重
要的,因为我们重写了游戏,而不是使
用游戏内的
Kismet
来进行绑定,那么此时游戏内是没有<
/p>
Pawn
的,我们需要告诉引擎来调用我们
的出
生类,而不是等待,那么,把他设置成
False
,游戏引擎将不再等待角色的产生,不再延迟而立即产生了我们的<
/p>
Pawn
(当然,如果
你需要游戏做过场
动画或
者摄像机漫游的时候,以及在登陆界面的时候
-
后面说,可以做一个方法来设置他的值将他设置为
True
)
< br>这时候,我们进行调试,可以发现我们编写的类已经全部正确调用,并且通过键盘的
WSAD
键进行移动后,发现我们设置的角色已经绑
定我们的
摄像机一起移动了。
第六步:
现在我们已经成功了部署整
体架构,还记得我们之前的那个
'Isometric'
吗?我
们现在就得来处理它,完成最后一步,实现自己的摄像机模
式。
找到我们之前编写的
文件,对继承的
Camera
类点右键,选择转到定义
。
(
或者打开
)
按下键盘的
Ctrl+F
找到
UpdateViewTarget
方法,复
制进我们的
因为我们要在中间部分修改,所以不好直接调用<
/p>
ViewTarget()
了。
找到
switch(
CameraStyle )
部分,添加我们前面定义的那个
'
Isometric'
的
case
1.
/*************
**************************************************
**
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
*
自定义摄像机模式开始
******************************************** *********************/
//
从自定义的
Pawn
类
(KWPawn)
的
GetDefaultCamer
aMode
传来
case 'Isometric':
//
修改摄像机位置
= (-55.0f
*DegToRad) * RadToUnrRot;
= (0
*DegToRad) * RadToUnrRot;
=
(30.0f
*DegToRad) * RadToUnrRot;
//
修改摄像机的位置和角色的偏移
Loc.X = on.X - 64;
Loc.Y =
on.Y - 64;
Loc.Z = on.Z + 156;
//
距离位置
//
设置缩放
Pos = Loc - Vector(Rot)
* FreeCamDistance;
on = Pos;
on = Rot;
break;
/*******************
**********************************************
*
自定义摄像机模式结束
******************************************** *********************/
复制代码
由于复制过来的代码使用了一个成员变量
=
DefaultFOV;
所以,在
Camera
类里,找到赋值他的地方添加进我们重写的
KWCamera
类里。添加
DefaultProperties
方法
。这样方便我们以后如果对
这个值进行修改而不动底层的东西。
1.
DefaultProperties
2.
{
3.
DefaultFOV=90.f
4.
}
复制代码
/*************************************************
****************
*
*
UpdateViewTarget()
方法介绍
*
*
这个类继承了基类的
Camera
摄像机类
.
*
当这个类创建的时候,则会自动调用基类
GamePawn
的虚方法
GetDefaultCa
meraMode(
需要重载
)(ps.
其实
UE3
里
,
没有虚函数
,
他们
extends
后
,
都属于重写
,
本身他就有这方法
,
可以进基类的
uc
文件看他怎么写的
).
*
如果想自己创建新的摄像机模式,则需要重载
GamePawn
的
GetDefaultCam
eraMode
的方法
.
*
/** Camera Mode */var Name CameraStyle;
* Camera
类里的
Camer
aStyle
成员变量,就是通过
GamePawn
的
GetDefaultCameraMode
实
现的。
(ps.
我觉得这个方法名用
S
et
更合
适,不过他不是方法,是需要继承的,所以
Get
也没错
)
*
我在继承的
GamePawn
类
(KWPawn)
里返回了
Isometri
c,
那么
,
我们在
里,找到
UpdateViewTarget
方法,将其复制过来
(
其
实
也可以不复制,复制的好处是原始的摄像机模式保留
)
*
在
switch( CameraStyle )
的地方添加对
Isometric
的处理(
Isometric
随便定义,不过你怎么
ca
se
的就在你定义的
Pawn
里怎么<
/p>
Get
*
在这个类里可以设置
*
这是一个可以简单使用且有品质保证的摄像机类上的基本功能,增加或者说是扩展了另一款同等级
GameCamera
的功能
******************************************
***********************/
我大概说下我的自定义视角里面的代码含义。
首先是
Rot
在这里我们固定摄像机角度进一个或多或少等角的固定角度之内。
(Pitch
Roll Yaw
你可以理解为三个面的旋转方式,就类似
UD
K
里面的
旋转三跟线)
然后是
Loc
在这里我们定义一个默认的摄像机位置距离
Pawn(
我们
的角色
)
的位置。
最后是
Pos = Loc
–
Vector(Rot) *
FreeCamDistance;
它做的是以现在的摄像机旋转作为方向矢量然后借着
FreeCamDistance
来加大。
FreeCamDist
ance
在父类定义中默认值是
256.0 f
。
最后,当我们按下
F5
进行调试,就可以发现我们可以通过键盘的
WSAD
键来控制角色进行行走了,并且已经固定为斜
45
度角了。
p>
如果你想修改你的视角,那么对
'Iso
metric'
里的代码进行修改。
如果你想添加多种视角,那么添加这里的
case
进行处理,然
后在继承了
Pawn
类的
KWPawn
类里控制
GetDefaultCameraMode
的返回
值来进行完成。
总结:
我
们已经通过修改完成了使用自己的视角来进行游戏,在下一章节中,我们将重写我们的控制方法,使用鼠标来进行
角色的移动。并且初
步谈谈关于
HUD
(界面渲染)。
UDK
入门教程
--
第二章:第三节
自定义角色
控制方式
-
上
在前面的教程中,我们已经把我们创建的角色放入置我们的场景之中了。
现在,我们将重写我们的控制方式,使用我们自定义的方式来控制我们的角色。
第一步:
< br>我们先把制作好的鼠标指针模型
(可以参考其他教程或者等待其他人更新模型制作
教程,
在此系列就不涉及大部分
UDK
编辑器
部分的操作,本系列留给程序员)放入
KingdomWorldUTGameContentEffect
中。
p>
(KingdomWorld
UTGameContent
后的路径随便你定义,你直接放在
Content
里也行,这样做的目的仅仅是便于管理而已)
附带一个我随便制作的模型:
第二步:
2.1.
< br>打开工程。在
Classes
文件夹里添加一个
KWHud
类。并编写如下代码
1.
class KWHud
extends GameHUD;
2.
3.
4.
5.
6.
7.
simulated event PostBeginPlay()
{
ginPlay();
`Log(
界面类运行
}
复制代码
我们编写了一个继承了界面类的的类,在这里我们可以在渲染事件里做一些东西(比如
U
I
,文字等)
2.2.
接着,我们添加一个方法
1.
function
vector2D GetMouseCoordinates()
2.
{
3.
local
Vector2D mousePos;
4.
local UIInteraction
UIController;
5.
local GameUISceneClient
GameSceneClient;
6.
UIController =
ontroller();
7.
if ( UIController !=
None)
8.
{
9.
GameSceneClient = lient;
10.
if ( GameSceneClient !=
None )
11.
{
12.
mousePos.X
= osition.X;
13.
mousePos.Y = osition.Y;
14.
}
15.
}
16.
return mousePos;
17. }
复制代码
/**************************
****************************************
*
*
GetMouseCoordinates()
方法介绍
*
*
这是我们自己定义的一个方法。
*
通过这个方法返回一个
vector2D
*
vector2D
包含了我们鼠标在当前场景中的正确位置。
*
其实就是
ontroller().osition;
******************************************
************************/
通
过这个方法,我们可以随时取得当前鼠标的位置(在后面用到)
第三步:
找到我们之前编写的
文件
声明如下变量
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;
复制代码
-
-
-
-
-
-
-
-
-
上一篇:高中英语单词天天记hammer素材
下一篇:计算机专业术语大全