[UE4] 浅析ADVANCED PHOTO MODE

2024-03-11 23:38
文章标签 ue4 浅析 mode advanced photo

本文主要是介绍[UE4] 浅析ADVANCED PHOTO MODE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 序言
    • 主要BP详述
      • 1. PhotoModeDataInterface
      • 2. PhotoModeComponent
        • 2.1 INITIALIZATION
        • 2.2 PHOTO MODE
        • 2.3 GALLERY
      • 3. PhotoModeFunctionLibrary
      • 4. PhotoModeFreeCamera
      • 5. PhotoModeWidget
        • 5.1 各种构造
        • 5.2 控件变量初始化
        • 5.3 聚焦事件
        • 5.4 处理其他逻辑
      • 6. PhotoModeGalleryWidget
        • 6.1 前构造
        • 6.2 构造
        • 6.3 初始化
        • 6.4 按键事件
        • 6.5 翻页
        • 6.6 聚焦事件
        • 6.7 接口事件
        • 6.8 析构

序言

主要BP共6个

  • PhotoModeComponent 相机模式组件
  • PhotoModeDataInterface 接口BP
  • PhotoModeFreeCamera 自由相机
  • PhotoModeFunctionLibrary 函数库
  • PhotoModeGalleryWidget 相册模组控件
  • PhotoModeWidget 相机模组控件

主要BP详述

1. PhotoModeDataInterface

接口BP主要为了频繁复用的函数而设计,只有两个声明:

  • SendPhotoData 传送PhotoData数据结构
  • TabToOpen 点击打开不同的tab

在控件蓝图中实际定义并频繁使用

2. PhotoModeComponent

最重要的相机模式组件,它能够赋予使用相机模式的能力。
其中定义了三个事件:

  • INITIALIZATION 初始化
  • PHOTO MODE 打开相机模式
  • GALLERY 打开相册
2.1 INITIALIZATION

传入了角色、camera组件、Spring Arm组件、Controller信息,并对相关控件参数、相机控件和相册控件参数完成初始化操作。

2.2 PHOTO MODE

打开相机模式的时候先判断一下是否已经打开了相册UsingGallery?如果打开了则执行Reset相册(关闭)
之后就是判断是否已经打开了相机模式(用一个bool变量UsingPhotoMode?判断)

如果没打开

  1. 则设置camera相关组件(相机、弹簧臂和相机模式组件)在暂停的时候tickable
  2. 设置pauseUsingPhotoMode?
  3. 游戏并且打开控件菜单
  4. 捕获最后输入的key类型来判断是键鼠还是手柄模式,以显示icon和具体操作

LastKey变量的一大用途就是判断键鼠还是手柄输入模式

如果已经打开

  1. 重设tickable的事件,关闭菜单并unpause游戏
  2. 取消inputModeGameOnly,取消角色隐藏
  3. 恢复SpringArm和Camera的初始值
2.3 GALLERY

逻辑和相机模式类似,多了一个bool变量EnableGallery?控制是否能够启用相册,UsingPhotoMode?判断相机模式开启了没有,开启了则需要Reset相机模式(关闭)

简述一下开启相册的执行流:

  1. 设置UsingGallery?
  2. 开启相册控件,判断此时是否需要暂停游戏(自己可设置这个bool值)
  3. 记录controller判断键鼠还是手柄操作模式
  4. 根据controller判断是否显示鼠标

3. PhotoModeFunctionLibrary

函数库被分为了两部分

  • AdvancedPhotoMode 功能性函数
  • AdvancedPhotoModeSave/Load 相片数据结构的存储和装载

这里大概介绍一些各个函数的用途:

  1. Screenshot (with UI):调用控制台截图(有UI),返回路径
  2. HighResScreenshot (without UI):调用控制台高分辨率截图(无UI),返回路径
  3. Get Default Screen Resolution:获取屏幕分辨率
  4. Directory Path Correction:检查自定义输出路径是否存在,不存在则使用默认路径
  5. Get Screenshot File:根据路径获取截图
  6. NormalizeScreenshotPath:标准化路径
  7. MakeThumbnail:获取缩略图(可以指定缩小比例)
  8. Hide HUD When Using Photo Mode:隐藏UI
  9. SavePhoto:将照片保存到Photos数组中
  10. LoadPhotos:从本地游戏存档读取相册
  11. SaveAllPhotos:将相册数组保存

4. PhotoModeFreeCamera

这个自由相机是拍照模式中开启自由模式生成的,内部主要实现了键鼠和手柄的输入切换来控制相机移动。

移动中限制菜单输入,并限制最大移动和旋转边界

5. PhotoModeWidget

相机模式控件,主要分析一下事件图表内容。
逻辑主要分为四部分:

  • 构造前处理、构造、析构
  • 控件变量初始化
  • 聚焦事件
  • 事件分发器、键输入和表单
5.1 各种构造

构造前处理完成了对控件的滑标和确认框的初始化
构造事件完成了界面颜色设置、界面动画设置、打开界面时是否显示鼠标的设置、设定初始聚焦为0号tab
析构事件完成了camera和gameplay内容的恢复

5.2 控件变量初始化

输入当前相机参数、当前弹簧臂参数、后处理默认参数、手柄图标切换、初始化各个表单命令按钮

5.3 聚焦事件

主要是处理焦点在不同tab上的逻辑,切换focus表单,移出focus的逻辑,鼠标进入离开逻辑。

5.4 处理其他逻辑

这一部分包含了tab的切换逻辑、键鼠和键盘操作的按键切换、自由相机的相关事件分发器的bind以及滑轮事件分发器的参数改变。

6. PhotoModeGalleryWidget

相册模组的划分更加琐碎,大致上与相机模组逻辑一致,这里简述一下。

6.1 前构造

构造前处理更新PhotoData相关数据,生成相关页面和照片的缩略图。

6.2 构造

构造事件完成了界面动画开启,处理鼠标是否显示以及聚焦事件。

6.3 初始化

初始化传入是否启用相册数据、相机组件引用、是否显示鼠标、默认手柄图标。

6.4 按键事件

键盘按键事件以及按钮触发事件

6.5 翻页

翻页相关逻辑

6.6 聚焦事件

与相机模组同理

6.7 接口事件

重载了接口BP中的虚函数,处理数据传送逻辑

6.8 析构

重设各种数值和内存回收

这篇关于[UE4] 浅析ADVANCED PHOTO MODE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799453

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

风暴项目个性化推荐系统浅析

风暴项目的主要任务是搭建自媒体平台,作为主开发人员的我希望把工作重心放在个性化推荐系统上。 目前风暴项目的个性化推荐是基于用户行为信息记录实现的,也就是说对于每条资讯,数据库中有字段标明其类型。建立一张用户浏览表,对用户的浏览行为进行记录,从中可以获取当前用户对哪类资讯感兴趣。 若用户第一次登陆,则按默认规则选取热点资讯做推荐,及所有资讯按浏览量降序排序,取前4个。另外,我考虑到后期可能有商业

中国书法——孙溟㠭浅析碑帖《越州石氏帖》

孙溟㠭浅析碑帖《越州石氏帖》 《越州石氏帖》  是一部汇集多本摹刻的帖,南宋时期的会稽石邦哲(字熙明)把家藏的一些法书碑帖集中一起摹刻成的,宋理宗时临安书商陈思《宝刻丛编》有记載这部帖的目录。现在还存有宋代时拓的残缺本,大多是相传的晋朝唐朝的小楷,后人多有临摹学习,并以此版本重新摹刻。 (图片来源于网络) 图文/氿波整理

浅析网页不安装插件播放RTSP/FLV视频的方法

早期很多摄像头视频流使用的是RTSP、RTMP协议,播放这类协议的视频通常是在网页上安装插件。但现在越来越多的用户,对于网页安装插件比较反感,且随着移动设备的普及,用户更多的希望使用手机、平板等移动设备,直接可以查看这些协议的视频。那是否有什么方案可以直接网页打开RTSP、RTMP协议的视频,直接观看不用安装插件呢?而且对于摄像头的数据,尽可能低延迟的获取实时画面。  其实很多摄像头厂家也注意到

浅析c/c++中 struct的区别

(1)C的struct与C++的class的区别。 (2)C++中的struct和class的区别。 在第一种情况下,struct与class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员变量,不能定义成员函数(在纯粹的C语言中,struct不能定义成员函数,只能定义变量)。例如下面的C代码片断: 复制代码代码如下:

混合模式属性background-blend-mode

background-blend-mode 是 CSS 中的一个属性,它允许你将背景图像与背景颜色或背景图像之间以一种特定的混合模式进行混合。这个属性为网页设计师提供了一种强大的方式来创建视觉上吸引人的背景效果,无需使用图像编辑软件或额外的图像文件。 background-blend-mode 可以应用于单个背景图像与背景颜色之间,或者当设置多个背景图像时,应用于这些图像之间。混合模式包括了许多

【UE4源代码观察】观察Core模块

话题 Core模块是整个引擎中最核心的模块,在之前的博客【UE4源代码观察】可视化所有模块的依赖情况中有统计,它被983个模块引用,恐怕除了第三方的模块外基本所有模块都有引用。我想首先观察其中的内容,然后再做测试:将Core模块拷贝到之前【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程建立的空白工程中,看能否将它成功编译,理论上讲,“核心”不应再依赖太多其他的东西,所以我应该不会再需

【UE4源代码观察】在空白工程中测试跨模块调用函数

目的 在之前的博客【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程中,成功让UBT工作起来了。现在我想要测试编译出的多个模块之间是否能互相调用,我记录下测试的过程。最终工程见 工程GIT链接。 实践 第一部分 首先仿照TestA模块建立TestB模块。 在TestB.h文件中声明了一个函数 int TestBFunc(int x, int y); 并在TestB.cpp中