序言
主要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?判断)
如果没打开
- 则设置camera相关组件(相机、弹簧臂和相机模式组件)在暂停的时候tickable
- 设置pauseUsingPhotoMode?
- 游戏并且打开控件菜单
- 捕获最后输入的key类型来判断是键鼠还是手柄模式,以显示icon和具体操作
LastKey变量的一大用途就是判断键鼠还是手柄输入模式
如果已经打开
- 重设tickable的事件,关闭菜单并unpause游戏
- 取消inputModeGameOnly,取消角色隐藏
- 恢复SpringArm和Camera的初始值
2.3 GALLERY
逻辑和相机模式类似,多了一个bool变量EnableGallery?控制是否能够启用相册,UsingPhotoMode?判断相机模式开启了没有,开启了则需要Reset相机模式(关闭)
简述一下开启相册的执行流:
- 设置UsingGallery?
- 开启相册控件,判断此时是否需要暂停游戏(自己可设置这个bool值)
- 记录controller判断键鼠还是手柄操作模式
- 根据controller判断是否显示鼠标
3. PhotoModeFunctionLibrary
函数库被分为了两部分
- AdvancedPhotoMode 功能性函数
- AdvancedPhotoModeSave/Load 相片数据结构的存储和装载
这里大概介绍一些各个函数的用途:
- Screenshot (with UI):调用控制台截图(有UI),返回路径
- HighResScreenshot (without UI):调用控制台高分辨率截图(无UI),返回路径
- Get Default Screen Resolution:获取屏幕分辨率
- Directory Path Correction:检查自定义输出路径是否存在,不存在则使用默认路径
- Get Screenshot File:根据路径获取截图
- NormalizeScreenshotPath:标准化路径
- MakeThumbnail:获取缩略图(可以指定缩小比例)
- Hide HUD When Using Photo Mode:隐藏UI
- SavePhoto:将照片保存到Photos数组中
- LoadPhotos:从本地游戏存档读取相册
- 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 析构
重设各种数值和内存回收
|