跳到正文

拍照模式

警告

在 Unreal Engine 5.5 Shipping 构建 中,由于引擎的一个 bug,截图将无法正确捕获。这不会影响其他任何 UE 版本;但如果你使用的是 UE5.5,需要将全局配置中的截图捕获方式(Screenshot Capture Method)改为 Render Target。如果你不打算在 Shipping 构建中启用拍照模式,可以使用 High Resolution Capture Method 以获得更高画质。

使用 Demo 玩家控制器设置拍照模式

如果你使用的是提供的 BP_EGUI_DemoPlayerController,那么拍照模式所需的一切都已配置好。默认情况下,你可以通过暂停菜单或游戏中的以下按键打开拍照模式

为自定义玩家控制器设置拍照模式

  1. 在你包含角色所有主要输入的 Input Mapping Context 中,使用 IA_TogglePhotoMode 设置一个用于打开拍照模式的输入

    你可以随意使用任何按键,此设置示例可在 EasyGameUI/DemoContent/Inputs/IMC_MainGameInputs 中找到

  2. 完成后,在你的玩家控制器中添加 IA_TogglePhotoMode 输入操作事件

  3. 然后,使用 Get HUD 函数获取 HUD Class 引用

    注意

    如果你是在玩家控制器之外执行此操作,则必须为 Target 引脚添加连接,例如使用 Get Player Controller 函数。你也可以使用系统函数 GetEasyGameHUD

  4. 然后,从 HUD 引用调用 Open Photo Mode 函数

  5. 最后,将其连接到输入操作事件的 Started 引脚
    请注意,默认情况下某些版本中只显示 Triggered 引脚,你需要点击输入事件节点底部的箭头才能显示 Started 引脚

  6. 如果你希望在拍照模式打开/关闭时添加任何逻辑,可以使用提供的事件 Photo Mode Closed,用法如下:

    以下是这些节点的代码:

    Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_4" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_CallFunction_4'"
    bIsPureFunc=True
    bIsConstFunc=True
    FunctionReference=(MemberName="GetHUD",bSelfContext=True)
    NodePosX=1440
    NodePosY=416
    NodeGuid=E9276AD3487B45CC0BB7819EBBD60B6A
    CustomProperties Pin (PinId=74002A114D273125AD067D9A2755C44E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nPlayer Controller Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.PlayerController'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=EE7CA1FC4D484CA190A79C9FE565F34F,PinName="ReturnValue",PinToolTip="Return Value\nHUD Object Reference\n\nGets the HUD currently being used by this player controller",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.HUD'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_3 477908274E18DFBB556103BB3AC8D3C5,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    Begin Object Class=/Script/BlueprintGraph.K2Node_Message Name="K2Node_Message_3" ExportPath="/Script/BlueprintGraph.K2Node_Message'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_Message_3'"
    bIsInterfaceCall=True
    FunctionReference=(MemberParent="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/Core/Utilities/BPI_EGUI_HUDInterface.BPI_EGUI_HUDInterface_C'",MemberName="OpenPhotoMode",MemberGuid=3AECC1DD4CF823E0E06536A7A8572CEA)
    NodePosX=1712
    NodePosY=384
    NodeGuid=F3D1CB6A4E41C97EB04734846F6975F3
    CustomProperties Pin (PinId=B66AE6C74CF9599AA136968D3A6EC632,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_EnhancedInputAction_2 01CE738041AAF37455DC11B152FEE45A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=E601B0054100F914003F1083AE2DF3EC,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AddDelegate_0 0F0A981F41B67C91BEF125BB56C3C981,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=477908274E18DFBB556103BB3AC8D3C5,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/CoreUObject.Object'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CallFunction_4 EE7CA1FC4D484CA190A79C9FE565F34F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=711F06404659461732C9F1B74C420A96,PinName="PhotoModeController",PinToolTip="Photo Mode Controller\nBP EPM Photo Mode Controller Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/EasyPhotoMode/Core/BP_EPM_PhotoModeController.BP_EPM_PhotoModeController_C'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AddDelegate_0 7FE29B2A4515B11C128BDB9221AD54EE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_0" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_AddDelegate_0'"
    DelegateReference=(MemberParent="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/EasyPhotoMode/Core/BP_EPM_PhotoModeController.BP_EPM_PhotoModeController_C'",MemberName="PhotoModeClosed",MemberGuid=AC57F2E3420CFE9CB1927CA354448783)
    NodePosX=1968
    NodePosY=368
    NodeGuid=DDCD2A4740181C09DB127D9F85B542EE
    CustomProperties Pin (PinId=0F0A981F41B67C91BEF125BB56C3C981,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_3 E601B0054100F914003F1083AE2DF3EC,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=9522373B492F391B01042187B21097D0,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_2 3ACF92F7420FA5CCDDC5BB975E56E86B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=7FE29B2A4515B11C128BDB9221AD54EE,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/EasyPhotoMode/Core/BP_EPM_PhotoModeController.BP_EPM_PhotoModeController_C'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Message_3 711F06404659461732C9F1B74C420A96,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=2F65F4BF4B047067360A72BAD9D40EFF,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/EasyPhotoMode/Core/BP_EPM_PhotoModeController.BP_EPM_PhotoModeController_C'",MemberName="PhotoModeClosed__DelegateSignature",MemberGuid=528D13314C06F9B02F89FAB6BD1B41B3),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CustomEvent_0 788529BF4570541EC1B4C29926E2F85A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_0" ExportPath="/Script/BlueprintGraph.K2Node_CustomEvent'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_CustomEvent_0'"
    CustomFunctionName="PhotoModeClosed"
    NodePosX=1760
    NodePosY=509
    NodeGuid=46F4790247865A9E744D34999387766C
    CustomProperties Pin (PinId=788529BF4570541EC1B4C29926E2F85A,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/Engine.BlueprintGeneratedClass'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController_C'",MemberName="PhotoModeClosed",MemberGuid=46F4790247865A9E744D34999387766C),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AddDelegate_0 2F65F4BF4B047067360A72BAD9D40EFF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=BFB6F4174CD29AD50323CE8E0707FB56,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_Knot_3 3ACF92F7420FA5CCDDC5BB975E56E86B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_2" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_Knot_2'"
    NodePosX=2272
    NodePosY=400
    bCommentBubbleVisible=True
    NodeComment="Code on Open"
    NodeGuid=9954F9214087CE221E2A57849A5460B9
    CustomProperties Pin (PinId=3ACF92F7420FA5CCDDC5BB975E56E86B,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AddDelegate_0 9522373B492F391B01042187B21097D0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=769E1568436D427C4186198B8CCE214B,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_3" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/EasyGameUI/DemoContent/BP_EGUI_DemoPlayerController.BP_EGUI_DemoPlayerController:EventGraph.K2Node_Knot_3'"
    NodePosX=2272
    NodePosY=560
    bCommentBubbleVisible=True
    NodeComment="Code on Close"
    NodeGuid=11D301B94B912B6F2017B48920426924
    CustomProperties Pin (PinId=3ACF92F7420FA5CCDDC5BB975E56E86B,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_CustomEvent_0 BFB6F4174CD29AD50323CE8E0707FB56,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,)
    CustomProperties Pin (PinId=769E1568436D427C4186198B8CCE214B,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
    End Object
    

信息

图库(Gallery)UI 可直接从拍照模式系统访问,无需任何实现。


附加工具

在 EasyGameUI/EasyPhotoMode/Core/VolumeBlueprints 文件夹中,你会找到几个在设置拍照模式时可能有用的蓝图

  • BP_EPM_CameraBlockingVolume

    放置在世界中后,此阻挡体积会阻止拍照模式的摄像机越过边界,充当一堵隐形墙,可用于封锁一些禁止进入的区域。

    你只需将其放置在你的世界中,并在所需位置缩放即可。

    该阻挡体积仅在玩家打开拍照模式时启用,因此无需担心它会影响正常游戏玩法

  • BP_EPM_PhotoModeDisablerVolume

    此体积可用于在特定区域阻止拍照模式的激活。比如你不想让玩家在房屋内或首领战场中打开拍照模式,只需放置此体积覆盖被封锁的区域即可!