IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> [UE4] 浅析ADVANCED PHOTO MODE -> 正文阅读

[游戏开发][UE4] 浅析ADVANCED PHOTO MODE

序言

主要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 析构

重设各种数值和内存回收

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:32:23  更:2022-03-11 22:32:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 14:51:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码