-
打开该项目并在内容浏览器中右击Mytaverse这个文件夹,选择迁移到你的项目Content目录下
- 当然也可以直接跳过打开这个项目,直接在Window的文件夹浏览器中将项目Content文件夹下的Mytaverse文件夹整个复制到你的项目的Content文件夹下
-
打开你的项目所使用的Pawn(或Character)蓝图类(我这个功能是纯蓝图做的,所以只能在蓝图里使用),添加一个名为Pointer Interaction的组件
-
在Pawn蓝图的BeginPlay事件逻辑后面调用PointerInteraction组件的SetupInteraction节点,同时调用PlayerController的SetShowMouseCursor来显示鼠标
- InteractionSource 参数要设为MouseCursor,启用鼠标交互
- InteractionDistance 表示鼠标交互距离,一般设置一个比较大的距离
- UseMultiRayHit 这个必须启用
- InteractionTypes 要设置为WorldDynamic
- Activate 这个地方勾选才能启用交互功能
-
在Pawn蓝图中添加LeftMouseButton事件并接入PointerInteraction组件的PressPointer和ReleasePointer方法
- 如果鼠标悬停在TransformGizmo上时,按下鼠标左键后会进入拖拽状态,这个时候我们一般不希望视角发生变化。
我这里判断PointerInteraction进入拖拽状态之后,就调用PlayerController的SetIgnoreLookInput来禁用视角控制,在鼠标松开之后在启用视角控制。
- 如果鼠标悬停在TransformGizmo上时,按下鼠标左键后会进入拖拽状态,这个时候我们一般不希望视角发生变化。
-
在需要显示并启用Gizmo的地方,只需要对BP_TransformGizmo对象调用ActivateGizmo就可以了,当然需要先在场景里放置或生成一个BP_TransformGizmo对象
- ActivateGizmo方法的InitialTransform表示显示Gizmo时候的初始Transform,一般在对一个Actor启用Gizmo的时候要把该Actor的Transform传入
- TransformEvent会在拖拽Gizmo的时候持续调用并传出当前计算得到的Transform结果,这个结果可以根据需要来使用
- UE5其实已经内置这个功能了,可以运行时使用,可以在引擎的InteractiveToolsFramework模块中找到相关代码
参考文章1
参考文章2