效果功能图

背景与目标

资产的工作量很大,并不是个人在短时间内可以独自完成的,需要大量美术人员长时间的进行团队合作完成的,并且完成一版之后,后续也还有更新维护的需求。所以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时候返回最新资产状态,让其依据此来显示出相应资产图标。

UE4 虚幻引擎 GitSourceControl源码解析相关推荐

  1. 【HGE引擎】源码解析——常用公共函数(二)

    一 开篇介绍 现在开始解读HGE接口类(Interface class)的一些公共函数 正如在上一篇文章中提到的,使用的公共函数调用方式都是CALL(不记得可以翻看),纯虚虚函数基本都是由hge_im ...

  2. UE4之Import源码解析

    参考: UE4导入FBX模型源码解析 导入按钮: 函数调用点: 弹出这个页面: 对应代码如下:

  3. Celery 源码解析六:Events 的实现

    序列文章: Celery 源码解析一:Worker 启动流程概述 Celery 源码解析二:Worker 的执行引擎 Celery 源码解析三: Task 对象的实现 Celery 源码解析四: 定时 ...

  4. [源码解析] PyTorch分布式优化器(1)----基石篇

    [源码解析] PyTorch分布式优化器(1)----基石篇 文章目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 ...

  5. UWA学堂上新|虚幻引擎源码解析——基础容器篇

    文章简介 文章主要介绍了虚幻引擎的基础容器的内部数据结构和实现原理,以及在实践中的应用,性能优化等方面.包括:TArray.TSparseArray.TSet.TMap等基础容器,TQueue.TTr ...

  6. 2022-10-24 ClickHouse 源码解析-查询引擎经典理论

    ClickHouse 源码解析: 综述 ClickHouse 源码解析: MergeTree Write-Path ClickHouse 源码解析: MergeTree Read-Path Click ...

  7. [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎

    [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 文章目录 [源码解析] Pytorch 如何实现后向传播 (1)---- 调用引擎 0x00 摘要 0x01 前文回顾 1.1 ...

  8. 源码解析2-GUI-绘制引擎(QPainter源码分析 )

    Qt源码解析 索引 Qt图形用户界面 应用程序窗口 Qt GUI 模块中最重要的类是QGuiApplication和QWindow.想要在屏幕上显示内容的 Qt 应用程序需要使用这些.QGuiAppl ...

  9. 关于 UE4 (虚幻引擎4) 4.25.1版本提示“无法定位程序输入点 DXGIGetDebugInterface1 于动态链接库dxgi.dll上”的错误的解决办法

    关于 UE4 (虚幻引擎4) 4.25.1版本提示"无法定位程序输入点 DXGIGetDebugInterface1 于动态链接库dxgi.dll上"的错误的解决办法: 1.原因: ...

最新文章

  1. 文件 单片机_单片机C语言编程中reg52.h头文件的作用
  2. cordova 插件开发
  3. 特征筛选3——卡方检验筛选特征(单变量筛选)
  4. 尤雨溪介绍 Vue 3:语法不变、TS 支持很好、2.0 系列还会发一个版本
  5. day5 ---- 数据类型及常用方法(字符串、列表)
  6. idea之springboot端口被占用/跳转到login
  7. 建设数据中心机房主要看这几点,否则被定为劣质机房
  8. webpack前端工程打包入门级教程
  9. 查看服务器文件命令大全,查看服务器文件的命令
  10. CE修改器使用教程 [基础篇]
  11. 计算机绘图户型设计摘要,cad2012计算机绘图
  12. linux查看进程命令wwn,在Linux下查看WWN、WWPN方法
  13. 5种赚钱方式,设计师加薪不用靠老板!
  14. 企业邮箱哪个品牌最好用?10年hr的经验分享
  15. 微信公众号获取用户地理位置,转换百度坐标
  16. 亚马逊买家号注册流程
  17. 【数据异常校验】T检验或T测试(T-test)
  18. 计算机毕业设计SSM房屋出租管理系统【附源码数据库】
  19. 【Python】面向对象,封装
  20. 疯狂android讲义第4版光盘_卧槽!当当网又又又可以 4 折买书了!!跟我一起薅羊毛了!...

热门文章

  1. android 圆形图片设置蒙层,Android引导蒙层,安卓新手引导图,引导图层,支持椭圆,圆形,矩形多种形状,一行代码快速搞定-Go语言中文社区...
  2. 城市轨道交通用不用计算机,四川男生学城市轨道交通运营管理在哪里
  3. 数据分析、挖掘方面,有哪些好书值得推荐
  4. 2011年企业邮箱最新横评出炉 尚易稳中求胜
  5. typed.js_对CircleCI的“为什么我们不再使用Core.typed”的答案
  6. 概念模型、逻辑模型和物理模型的重新理解
  7. 浙大教授:如何规划自己的博士五年生活?
  8. 【圣诞系列】注意:这款Python版创意十足的专属“圣诞二维码”上线啦(赶紧收藏)
  9. Android IOS WebRTC 音视频开发总结(六六)-- 三个角度分析美女视频直播这个行业...
  10. Google财富传奇