1.功能介绍
点击界面上的按钮,然后实时将飞机显示在地面上,而且是紧贴地表的,然后再次点击鼠标左键确定飞机的最终位置
2.所需蓝图知识
最基本的蓝图通信(三种通信方式)、射线检测、枚举的使用、UI界面的制作
3.功能实现
这个功能实现需要创建一个Actor蓝图类命名为Z19Actor、UI界面命名为AddZ19UI、Character蓝图类命名为ThirdPersonCharacter(也可以是pawn蓝图类,只要有鼠标点击事件就行)、一个枚举变量命名为MouseFunctionType
- Z19Actor:这个蓝图主要就是存放了飞机模型
- AddZ19UI:一个UI界面,里面就是一个按钮
- ThirdPersonCharacter:角色蓝图,主要用于实现鼠标点击功能
- MouseFunctionType:这个枚举值主要用于管理鼠标左键的功能,因为我们系统中有很多功能需要用到鼠标点击事件,所以我们需要在激活特定的功能时鼠标执行特定的功能
①MouseFunctionType枚举值的话有几种功能就设置几种值就行,我这里就设置了三种分别是None(鼠标点击时不做任何处理)、AddZ19(添加模型)、MoveZ19(移动模型)。我们要在ThirdPersonCharacter蓝图中创建一个变量名称为MouseFuctionEnum(类型就是MouseFunctionType)来接收这个枚举值,默认值设置为None。


②在进入系统时,我们将AddZ19UI添加到视口中并将AddZ19UI的一个引用传递给ThirdPersonCharacter蓝图类(在角色蓝图中创建了一个AddZ19UI类型的引用,这属于直接蓝图通信方式)

③Add19UI的制作,就是一个按钮和点击事件,按钮点击后激活鼠标对应的功能,然后在场景中创建Z19Actor类的对象,并将此对象的引用存储下来,最后将actor的碰撞给取消掉(如果不取消后面的实时射线检测会出问题,因为飞机本身就有碰撞然后射线检测就检测不到地面而是慢慢的检测飞机移动后的位置)
- 界面

- 按钮点击事件

④之后就是实现ThirdPersonCharacter蓝图类中的功能了,我们需要利用Tick事件实时地改变飞行模型的位置,然后鼠标左键点击后确定最终位置并关闭此功能。
- Tick事件:这里将移动飞机的功能封装到一个函数里面了,这样可以让代码更加简洁

- FunctionTransfromZ19:本函数主要就是发射一条射线,射线的方向由鼠标控制,然后再计算出根据检测点的位置和法向计算出飞机的位置以及旋转。
- 鼠标左键点击后将枚举值设置为None,也就是关闭此功能。最后为模型添加碰撞
4.功能展示
