Choose your operating system:
Windows
macOS
Linux
菜单锚点(Menu Anchor) 控件可以添加到UI布局中,用来调整弹出菜单在屏幕中的位置。
本文介绍了如何在UI布局中使用和调整菜单锚点控件,还帮你熟悉使用 虚幻示意图形界面设计器(Unreal Motion Graphics UI Designer (UMG)) 来使用并调整菜单锚点控件的示例。
菜单锚点属性
细节面板选项
在已放置的 菜单锚点(Menu Anchor) 的 细节(Details) 面板中,可以设置几个控件相关的选项:
选项 |
描述 |
---|---|
菜单类(Menu Class) |
调用菜单时要生成的控件蓝图(弹窗)。每次都创建新的控件。 |
放置位置(Placement) |
几个放置选项来决定创建的控件的位置。 |
适应到窗口(Fit in Window) |
如果设为true,那么窗口锚点会试图将菜单全部放入窗口中。 |
应在窗口后推迟绘图(Should Defer Painting After Window) |
可以在窗口内容之后调整是否推迟绘图。 |
使用应用菜单堆栈(Use Aplication Menu Stack) |
如果设为false,你自己可以控制菜单的寿命。 |
OnGetMenuContent |
通过将功能或属性绑定到 OnGetMenuContent 事件(调出弹出窗口时会调用该事件),实现对弹出窗口的自定义(请参阅下文)。 |
OnGetUserMenuContent |
通过将功能或属性绑定到 OnGetUserMenuContent 事件(请求菜单内容时会调用该事件),实现对弹出窗口的自定义(请参阅下文)。 |
OnMenuOpenChanged |
通过将功能或属性绑定到 OnMenuOpenChanged 事件(菜单的打开状态发生变化时调用该事件),实现对弹出窗口的自定义。 |
对于 OnGetMenuContent 和 OnGetUserMenuContent 事件,你可以直接从 详情(Details) 面板创建并绑定功能。调用菜单锚点时就会调用该面板。这用于为弹出菜单的创建过程提供额外的功能。例如,下图我们运行了一项检查来确定玩家是否 "正在战斗",如果没有,则允许他们访问弹出菜单。如果正在战斗,则不允许他们访问弹出菜单。
蓝图函数
菜单锚控件拥有一些控件特有的函数,这些函数可以通过脚本进行调用,下文进行介绍。
选项 |
描述 |
---|---|
关闭(Close) |
如果菜单当前打开的话,关闭菜单。 |
窗口内适应(Fit in Window) |
设置锚点菜单在窗口中的适应大小。 |
获取菜单位置(Get Menu Position) |
返回菜单在世界空间中的位置。 |
有打开的子菜单(Has Open Sub Menus) |
检查菜单是否有打开的子菜单。 |
是否打开(Is Open) |
检查目标菜单锚点当前是否打开并返回一个布尔值。 |
打开(Open) |
如果菜单当前关闭的话,打开菜单。 |
设置位置(Set Placement) |
设置放置选项来决定创建的控件的位置。 |
应在点击时打开(Should Open Due to Click) |
返回是否能够通过点击来打开菜单。 |
切换打开(Toggle Open) |
切换菜单的打开状态,可以代替打开/关闭选项来使用。 |
使用示例
如果你想要创建库存菜单并在玩家点击物品时显示弹出菜单,请参阅以下示例。
首先要创建弹出菜单的外观。
上图我们创建了一个简单的 控件蓝图(Widget Blueprint),名为 MenuPopUp,它由垂直框以及其中的三个按钮组成。
接下来,需要为库存菜单创建另一个控件蓝图,下图中我们将其称为 HUD。
创建了库存菜单后,您还要添加 菜单锚点(Menu Anchor) 控件(位于 基元(Primitive) 下方)。
然后,将菜单锚放置在希望其显示的位置,在本例中,我们将其放置并锚定在右边/中间的位置。
在菜单锚点的 详情(Details) 面板中,设置 菜单类(Menu Class)(或要生成的控件蓝图)及其布置选项。
在图表选项卡上,为每个按钮添加 OnClick 事件,并拖动到菜单锚点控件中。
拖动菜单锚,可以调用 打开(Open) 功能来打开并显示特定的菜单类。
选中**打开(Open) 节点的 聚焦菜单(Focus Menu)** 选项来给菜单锚点控件应用聚焦。这样会在聚焦点离开菜单时将菜单锚点控件自动关闭(比如点击菜单外任何位置)。这样可以让玩家与菜单外区域互动时关闭菜单。
创建了库存菜单后,需要通过某种方式在游戏中调用该菜单。
可以选择通过 关卡蓝图(Level Blueprint) 或(在我们的示例中)通过默认Pawn类(将其设为使用 MyCharacter 蓝图)调用。
在上图 MyCharacter 蓝图中,当游戏开始时,我们创建HUD控件并将其保存为名为 HUDWidget 的变量,这样,我们就可以在以后访问该控件。然后,将 I 设置为在 添加到视口(Add to Viewport) 和 从父级移除(Remove from Parent) 之间切换,从而显示或隐去库存菜单。我们还将 显示光标(Show Mouse Cursor) 设为根据是否打开了库存菜单来启用或禁用。
最后,在 MenuPopUp 蓝图(你的弹出菜单)中,添加一些脚本,以便在玩家按下弹出菜单中的某个按钮时 关闭 菜单锚点。下图中,当构建了弹出菜单后,我们通过 投射(Casting) ,然后将其提升为名为 MyCharacterReference 的变量,就得到了 MyCharacter 蓝图的引用。通过该引用就可以访问HUD。
你可能想要为弹出菜单中的每个按钮添加一些功能,在按下按钮时,会调用这些功能(而不是输出到屏幕上)。例如,按下第一个按钮 "使用" 库存中的物品,按下第二个按钮"丢弃"物品,按下第三个按钮"取消"操作并让玩家返回到库存菜单。
这只是一个示例,你也可以更改菜单锚开启的条件。除了按下按钮,也可以使用 IsHovered 功能来确定光标是否悬停在某个对象上,然后打开菜单锚和弹出窗口,以便显示工具提示或其他形式的通知。无论是哪种情况,该文档都可以帮助你开始通过脚本来实现使用菜单锚显示/隐去弹出控件。