鼠标拖拽物体,效果如下图:
1、新建PlayerController,更名字为MI_PlayerController,双击打开并设置参数:
2、新建GameMode,更名为MI_Gameinfo。参数如下设置:
3、新建材质,更名为BasicAsset02.参数节点如图:
勾选使用静态光照。
再新建材质,更名为BasicAsset01,节点如图:
再新建材质,更名为BasicAsset03,节点如图:
4、新建Actor,更名为MI_Sphere。添加静态网格体组件,细节面板如图:
5、设置MI_Sphere的构造函数Construction Scrip,对组件设置材质。如图:
6、完善鼠标事件OnBeginCursorOver(StaticMesh)
在玩家控制器中启用了鼠标悬停事件后,将鼠标指针移动到此组件上时调用此事件,
鼠标悬浮其上时先设置鼠标焦点样式
选择当前鼠标光标为手型
注意目标为玩家控制器对象的引用
因为玩家控制器类默认值参数中有默认鼠标光标样式,如图:
修改静态网格体的材质:
7、完善鼠标事件OnEndCursorOver(StaticMesh)
在玩家控制器中启用了鼠标悬停事件后,将鼠标指针从此组件上移开时调用的事件,
把鼠标光标样式设置为默认值。
把材质改回默认材质:
8、完善鼠标事件OnReleased(StaticMesh)
在玩家控制器中启用了点击事件后,鼠标悬停在此组件上并松开左键时调用的事件
需要做两件事,1是设置变量bEnableMouseOverEvents的值是否应生成actor/组件鼠标悬停事件。
设置为true
2是设置材质
9、完善鼠标事件OnClicked(StaticMesh)
在玩家控制器中启用了点击事件后,鼠标悬停在此组件上并点击左键时将调用的事件。
此时要做的1是设置变量bEnableMouseOverEvents的值是否应生成actor/组件鼠标悬停事件。
设置为false,组件不在生成鼠标悬停事件。2是设置材质:
3是打开Gate,设置Actor位置。
那么新的位置如何得到,首先我要按通道获取光标下的命中结果,命中结果的位置进行拆分,使用此位置的XY坐标,和Actor的Z坐标组成一个新的向量,赋予设置Actor位置的NewLocation参数即可。如下图所示:
10、完善Gate的其他引脚。
eventtick每帧检测门,鼠标移动到此组件上时和鼠标在此组件上松开左键时close Gate。
编译,保存。
11、拖拽几个MI_Sphere到关卡当中,编译保存运行效果如图