*
* 必须用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=\后面这个为这个事件将会对应的控制台命令。