udk教程 下载本文

*

* 必须用exec function的声明方式

* 方法名可以任意取,你取啥名,在控制台就输啥命令 *

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

5.2.添加一个方法来显示鼠标

1. function DrawTraceDebugRays() 2. {

3. local KWPlayerController IsoPlayerController;

4. IsoPlayerController = KWPlayerController(PlayerOwner); 5.

6. //绘画选择范围。

7. //MakeColor的参数为R,G,B以及透明通道。 8. Draw3DLine(IsoPlayerController.StartTrace,

IsoPlayerController.EndTrace, MakeColor(255,128,128,255)); 9. //绘画移动路线

10. Draw3DLine(IsoPlayerController.PawnEyeLocation, IsoPlayerController.MouseHitWorldLocation, MakeColor(0,200,255,255)); 11.}

复制代码

/******************************************************************* * DrawTraceDebugRays()方法介绍 *

* 渲染显示鼠标跟踪调试线。

* 这个方法在PostRender中,通过bDrawTraces作为开关调用。

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

5.3.在PostRender方法中,找到DrawHUD()方法的调用地方,在后面添加如下代码:

1. if(bDrawTraces) 2. {

3. //父类有这么一个玩意,可以显示寻路的线路。 4. super.DrawRoute(Pawn(PlayerOwner.ViewTarget)); 5. DrawTraceDebugRays(); 6. }

复制代码

第六步:

现在,我们需要绑定这个Hud类。

6.1.首先,找到我们之前编写的KWInfo.uc文件 在DefaultProperties里添加一行

1. //设置界面类

2. HUDType=class'KWGame.KWHud'

复制代码

现在,你可以调试工程,通过控制台输入ToggleIsometricDebug(你可以输入togglei出现全部的命令后按tab再按回车,大小写随便)

发现鼠标移动到的位置,屏幕上就会显示你选择的是何种对象。

楼外音:“楼主你最前面发的那个资源文件是干嘛的?我没看到地方调用啊” 嗯。。。那个。你也发现了,其实这是第六步,不是总结。 细心的同学可能已经发现了,那个最前面第一步发的资源其实是一个鼠标指针的资源。

那么,我们还是说说怎么加载一个鼠标指针把,而不是用这两根线。

6.2.打开工程。在Classes文件夹里添加一个MeshMouseCursor类。并编写如下代码

1. class MeshMouseCursor extends Actor; 2. var() StaticMeshComponent Mesh; 3. DefaultProperties 4. {

5. Begin Object Class=StaticMeshComponent Name=MarkerMesh 6. BlockActors=false 7. CollideActors=true 8. BlockRigidBody=false 9. //模型文件

10. StaticMesh=StaticMesh'Effect.UI.Mouse0001mesh' 11. //重置模型的大小-0.3倍

12. Scale3D=(X=0.3,Y=0.3,Z=0.3)

13. Rotation=(Pitch=-16384, Yaw=0, Roll=0) 14. End Object

15. Mesh=MarkerMesh

16. CollisionComponent=MarkerMesh 17. Components.Add(MarkerMesh)

18.}

复制代码

你看到的没错,StaticMesh'Effect.UI.Mouse0001mesh'这玩意就是我最前面提供的文件里的资源路径名。

现在,我们已经创建了一个Actor对象(鼠标指针),如何把他应用到游戏中去呢

6.3.找到我们之前编写的KWPlayerController.uc文件 声明如下变量 1. var MeshMouseCursor MouseCursor; //3D鼠标指针

复制代码

6.4.在KWPlayerController类的PostBeginPlay方法中super.PostBeginPlay();的后面添加如下代码:

1. MouseCursor = Spawn(class'MeshMouseCursor', self, 'marker');

复制代码

6.5.添加方法

1. event PlayerTick( float DeltaTime ) 2. {

3. super.PlayerTick(DeltaTime);

4. //设置当前鼠标的位置为KWHud中PostRender方法取到的MouseHitWorldLocation

5. MouseCursor.SetLocation(MouseHitWorldLocation); 6. }

复制代码

PlayerTick是父类的一个方法,我们重载了它。

在这里,我们没必要去调用父类的super.PlayerTick()了。 他原本会通过PlayerTick来移动(可参KingdomWorld\\Development\\Src\\Engine\\Classes\\PlayerController.uc) 当然这些都要我们重新来做了,所以无需调用原本的过程了。

考使用MouseHitWorldLocation是因为我们让鼠标的位置呈现三维状态,他一直跟着地表(或者物体)走。

当然,你也可以设置它为一个2D位置。

这时候我们调试项目,可以发现鼠标的指针已经跟随着我们动了,并且显示移动到位置的对象名

楼外音:“这指针好丑啊,黑不拉几一陀”

嗯。。。这位同学,这是代码教程。。。你也可以把他做成2D的图片嘛,当然做3D是为了教程需要。

当然,还记得我们自定义的Pawn类吗?你可以试着和KWPawn一样,添加一个灯光给他。(本文不做说明,自己动手才有乐趣嘛,当作本节作业)

总结:

这一节主要取得了我们走路需要的一些关键数据,并且简单介绍了渲染的方法和如何区别不同对象的处理。

在下一节中,我们将会使用我们自己做的这个鼠标,来进行走路。

在前面的教程中,我们已经将我们的鼠标指针放入场景中了

接下来,我们将全面接管引擎的输入。把他的控制方式交给我们来处理。

第一步:

首先我们把 KingdomWorld\\UTGame\\Config\\UTInput.ini 添加进工程(以添加为链接方式,具体参考第一章第一节) 找到[Engine.PlayerInput]中的

Bindings=(Name=\Bindings=(Name=\

这里我特别说明一下UTInput.ini 里,引擎会通过他,找到相应的映射控制方法。

Name=\为底层方法,这是一个鼠标滚轮移动事件。 Command=\后面这个为这个事件将会对应的控制台命令。