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 虚幻引擎 GitSourceControl源码解析 -> 正文阅读

[游戏开发]UE4 虚幻引擎 GitSourceControl源码解析

效果功能图

在这里插入图片描述

背景与目标

资产的工作量很大,并不是个人在短时间内可以独自完成的,需要大量美术人员长时间的进行团队合作完成的,并且完成一版之后,后续也还有更新维护的需求。所以UE的Editor也提供了对资产版本管理的功能,里面默认包含了Git、LastVersion等功能,如果有需要自己加也完全可以自己加,我公司有需要自己加一个,所以研究了一下UE的GitSourceControl源码,准备抄作业。大概包含的功能是Connect、UpdateStatus、Add、Delete、Sync,对应基本都是去找到本机的Git Bash,然后输入Git命令,比如Git Status。

UE命令Git的命令
Connect连接Git Bash
UpdateStatus对应Git Status
Sync对应Git Pull
CheckIn对应Git Commit

在这里插入图片描述

GitSourceControlProvider

是一个代码控制的提供者,他的父类是ISourceControlProvider,实现了十多个虚拟函数。在StartModule的时候会把这个provider注册进SourceControl里面去,然后Editor的SourceControl就会加上这个Provider的选项供用户选择,用户选择后,后面有关资产的所有SourceControl的操作都会执行到这个Provider的Execute函数里来。

  1. Execute()

UE执行任何功能,比如Connect、UpdateSate、CheckIn、Delete、Add都会调到这里来,这里统一来处理业务逻辑,依据不同的命令选择不同的Worker来执行。执行后会把State存储下来,UE调取GetState函数来获取,UE依据此State来决定给各个资产显示怎样的图标。

  1. GetState()

获取状态的函数,一般这个函数会在Execute函数之后,Provider里有StateCache这个Tmap变量,存储了各个资产的状态。Worker执行完成命令后,也会更新StateCache。

  1. Tick()

在这个函数会把各个剩余Command拿出来检查一遍,看是否执行完毕,执行完成后,及时通过delegate通知UE。

FGitSourceControlCommand

可以理解为需要执行的命令,Provider里面会有把这些命令一个个创建并且存储下来,放到线程池里去执行。每个Command里包含一个Worker来决定具体要执行的任务,比如GitUpdateStatusWorker,就是去更新资产状态的工作者

  1. DoThreadWork

调用Worker执行任务,比如GitUpdateStatusWorker.Excute(Command), 执行资产状态更新任务。

IGitSourceControlWorker

这是具体的工作者,比如执行connect的工作者GitUpdateStatusWorker的父类就是IGitSourceControlWorker,里面有三个虚拟函数,提供各个工作去实现落实。

  1. GetName()

通过这个函数来判断是什么哪个工作者,比如执行FGitConnectWorker的名字就是叫“Connect”。

  1. Excute()

执行函数,这个函数的参数就是FGitSourceControlCommand,由FGitSourceControlCommand来告诉对哪些资产文件执行

  1. UpdateStates()

更新各个资产的状态,执行各个命令后,各个资产的状态也会随之改变,改变之后需要及时更新Provider的状态,方便UE调用。

GitSourceControlUtils

这是SourceControl的工具类,之前GitSourceControl就是在这个Util里面执行各个Git的命令来对资产的控制,比如在这Git Status来获取资产的状态。所以我对资产的管理也是放在了这里,比如拉取资产,资产差异对比。

  1. RunCommand 执行具体Git命令的函数

  2. RunUpdateStatus 执行Git Status

在StartModule里注册流程图

在这里插入图片描述

  1. 先是给当前Provider注册各个类型的Worker,告诉其我支持这些功能,如果有需要尽管调用。值得注意的是,这里并不是把这个Worker对象new出来了,而是放了个能够创建出这个Worker的Delegate,等真正需要的时候,再去执行这个Delegate,来创建出相应的Worker。

  2. 给SourceControl注册Provider,注册后在SourceControl里就会有这个Provider的选项,用户选择这个Provider后,后续的资产控制就会运行到这个Provider来,比如点击右键选择Sync。

执行UpdateStatus的完整流程图

在这里插入图片描述

  1. 用户进入某个文件夹后,UE执行Execute,并且要求执行UpdateStatus任务。

  2. 接到任务,依靠那个Delegate创建出UpdateStatusWorker。

  3. 放到Command,放到线程池里去执行。

  4. 进行MD5差异对比,算出相应的状态。

  5. Tick的时候获取到最新的资产状态。

  6. 当UE调用GetState时候返回最新资产状态,让其依据此来显示出相应资产图标。

  游戏开发 最新文章
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-09-13 11:49:37  更:2022-09-13 11:51:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 4:01:58-

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