udk教程

第六步:

现在我们已经成功了部署整体架构,还记得我们之前的那个'Isometric'吗?我们现在就得来处理它,完成最后一步,实现自己的摄像机模式。

找到我们之前编写的KWCamera.uc文件,对继承的Camera类点右键,选择转到定义。

(或者打开KingdomWorld\\Development\\Src\\Engine\\Classes\\Camera.uc)

按下键盘的Ctrl+F找到UpdateViewTarget方法,复制进我们的KWCamera.uc 因为我们要在中间部分修改,所以不好直接调用super.UpdateViewTarget()了。

找到switch( CameraStyle )部分,添加我们前面定义的那个'Isometric'的case 1. /**************************************************************

***

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. DefaultProperties 2. {

3. DefaultFOV=90.f 4. }

复制代码

/***************************************************************** *

* UpdateViewTarget()方法介绍 *

* 这个类继承了基类的Camera摄像机类.

* 当这个类创建的时候,则会自动调用基类GamePawn的虚方法GetDefaultCameraMode(需要重载)(ps.其实UE3里,没有虚函数,他们extends后,都属于重写,本身他就有这方法,可以进基类的uc文件看他怎么写的).

* 如果想自己创建新的摄像机模式,则需要重载GamePawn的GetDefaultCameraMode的方法.

* /** Camera Mode */var Name CameraStyle;

* 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编辑器 部分的操作,本系列留给程序员)放入KingdomWorld\\UTGame\\Content\\Effect中。(KingdomWorld

\\UTGame\\Content后的路径随便你定义,你直接放在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;

联系客服:779662525#qq.com(#替换为@)