PureMVC框架
Pure MVC是在基于模型、视图和控制器的MVC模式建立的一个轻量级的应用框架.
目前已经广泛应用于各类平台,常见用的语言如C#,Java等
本文尝试根据标准的C++PureMVC框架魔改成UE4版本方便使用的UnrealPureMVC(UPM)框架插件
Pure MVC是在基于模型、视图和控制器的MVC模式建立的一个轻量级的应用框架.
目前已经广泛应用于各类平台,常见用的语言如C#,Java等
本文尝试根据标准的C++PureMVC框架魔改成UE4版本方便使用的UnrealPureMVC(UPM)框架插件
有的时候我们需要对当前工程下的特定资源进行一些操作,比如找到所有图片资源或者所有静态模型资源,然后把这些资源信息发到某个UI上进行操作等等
本文对UE4资源注册模块
AssetRegistry
进行简单的分析目前蓝图已经封装了相应的库,可以非常方便的调用
Asset Registry
模块负责处理引擎下的资源信息(收集/检索*.uasset
),从这个模块中可以读取到所有资源信息(FAssetData
)
主要参数
1 | /*Obj的具体路径,比如 /Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter.ThirdPersonCharacter*/ |
在获取
Asset
的时候需要填充一个结构体参数FARFilter
,里面的参数部分类似上述参数,之后再看
对资源进行检索的时候的过滤参数
1 | //参考FAssetData |
比较需要注意的是ClassNames
这个参数,这个类型并不是我们场景中对象的类型,打个比方,我们场景里的玩家一般是ACharacter
,但是我们的资源其实就是Blueprint
,所以在填充这个结构体的时候并不能用*.::StaticClass()
来给与Class
类型
一般情况资源的创建类型就是用右键创建出来的名称或类似的名称,并且都是继承自Object
储存了读取asset后的相关信息,用作磁盘内容的cache数据,用于描述asset registry当前的状态,可以由IAssetRegistry进行使用和维护。把这些数据单独组成一个FAssetRegistryState类,是为了减少耦合性,因为引擎中除asset registry外的其他模块 也需要用到这些数据。
我们可以通过static TScriptInterface<IAssetRegistry> GetAssetRegistry();
获取单例
蓝图亦可以
1 | static UObject* GetAsset(const FAssetData& InAssetData); |
通过上述方法可以自定义的根据FARFliter
参数来获取所需的资源数据
如果不清楚每个参数的含义,可以反向的通过下面方法来查看
1 | static FAssetData CreateAssetData(const UObject* InAsset, bool bAllowBlueprintClass = false); |
1 | bool GetAssetsByPackageName(FName PackageName, TArray<FAssetData>& OutAssetData, bool bIncludeOnlyOnDiskAssets = false) const; |
上面三个方法根据不同方式来获取对应的资源
1 | void GetSubPaths(const FString& InBasePath, TArray<FString>& OutPathList, bool bInRecurse) const; |
基于一个基础路径获取子路径,比较有用
1 | bool GetReferencers(FName PackageName, TArray<FName>& OutReferencers, EAssetRegistryDependencyType::Type InReferenceType = EAssetRegistryDependencyType::Packages) const; |
获取引用和依赖关系,也很有用
1 | void SearchAllAssets(bool bSynchronousSearch); |
扫描/搜索文件,不需要返回值,因为扫描以后文件就保存在FAssetRegistryState
内了
上一篇留下了一个镜头抖动问题,实际上ALS项目是通过自定义
CameraManager
实现的,本篇就此来展开一下
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystem分析(二):攀爬系统
接下来就是布娃娃系统,对应的就有从布娃娃恢复成正常状态的起身动作。
这里还同时分析了一下站立和下蹲姿势的切换,因为起身动作会涉及到这一块
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystem分析(二):攀爬系统
AdvancedLocomotionSystemV4分析(四):布娃娃和起身
AdvancedLocomotionSystemV4分析(五):镜头
本片主要分析一下ALS项目的动作叠加部分,主要用到各类姿势的切换,如受伤状态、持枪、持弓状态等,另外一种一般项目会用到的
AnimOffset
在这里没有用到,头部转向用了另外一种方式制作
ALS系统的攀爬系统思路比较简单,播放蒙太奇配合位置的刷新。缺点是没有中间状态,意味着无法打断或者做平移等
后面我打算尝试改成加入中间过程的攀爬系统
AdvancedLocomotionSysemV4分析(一):移动和脚步IK
AdvancedLocomotionSystemV4分析(三):动作叠加
最近对UE4商城
AdvancedLocomotionSysemV4
进行了一波初步分析,感觉这个项目已经包含了大多数情况能用得到的动画表现,从移动表现中比较容易出问题的脚步问题到IK、攀爬、翻滚、布娃娃以及动作叠加等模块都有讲到打算参考这个项目的思路重新实现一边动画逻辑,顺便对其中重要的模块和知识点记录一下
这一篇先从基础的移动逻辑,包括转身、起跳等,再顺带看一下脚步IK的实现
AdvancedLocomotionSystem分析(二):攀爬系统
AdvancedLocomotionSystemV4分析(三):动作叠加
此文讲解如何使用Git版本的小乌龟插件
由于git默认的黑窗口对于部分开发人员特别是美术人员比较不太友好,所以很多人会选择使用可视化的TortoiseGit
(小乌龟)插件来协作开发
首先必须先安装git,
无脑下一步安装完毕,如需了解git如何使用,可以参考本人另外一篇文章
然后下载小乌龟插件,可以随意搜索下载,或者使用如下地址下载
无脑下一步安装,成功以后右键菜单会添加小乌龟按钮
先来一张最简化的流程图,上下两部分分别用文字或者命令来解释流程
如果有使用过SVN
的同学,在这里要说明git
与SVN
在使用上会多一步操作,也就是git
分布式特点的体现,
git
会有本地仓库一个概念,SVN
的Commit
意味着已经把本地修改推送到了远程服务器端,但是git
的commit
只是提交到本地仓库,在本地仓库存储着几乎与远程服务器同步的信息,包括所有文件信息、提交日志、分支信息等,也就意味着git
可以在没有网络的时候也同样可以维护着一个仓库内容,在需要的时候在同步到远程服务器,这一点对于人数比较多的团队协作开发是优于svn
的
在正常使用小乌龟之前,需要先配置一下环境
如果使用GitHub
仓库,需要到GitHub
去注册一个账号,比较简单此步忽略
如果是本地仓库的协作开发的,用已经搭建好的本地仓库ip去注册(例如192.168.1.111),然后需要管理员授权以后就可以参与开发
然后在开发之前,需要生成本地密钥,作为开发权限的一种判定
打开小乌龟安装目录,打开PuTTYgen
界面如下
用Generate
来生成密钥,或者如果你已经用git生成过密钥,就可以使用Load
选项来加载之前生成的私钥,记得勾选AllFile
选项
然后进入如下界面
用 SavePublicKey
和SavePrivateKey
按钮来保存一份本地的密钥文件,我这里把私钥保存为了toPrivate.ppk
文件
接下来进入下一步
打开软件Pageant
,双击以后如果没有出现窗口记得在右下角找到一个图标,打开以后如下窗口
点击AddKey
添加刚才保存的密钥(toPrivate.ppk
)
如果到这里之前的步骤提示你需要输入账户/密码的,这是git初始化的时候需要初始化账户,请参考我的git文档完成这一步
目前掌握的信息每次电脑启动时都需要手动添加key,此坑先留着,以后研究
至此,小乌龟的环境已经配置完毕
我在github
上有一个测试仓库,我们直接用此仓库来进行测试
地址为git@github.com:VJien/Test.git
右键GitClone
,输入URL,保持其他默认,点击OK
拉取成功
我们来对test.txt
文件做个修改,然后在新建要给文件 1.txt
test
文件里面我们加入一些字符串,保存以后该文件变为红色感叹号
在该目录下右键小乌龟选择Dif
,我们在同时用GitBase窗口来对比一下
看到如下提示,表示该文件被修改了
可以右键单击一个文件来选择回退(Revert)或者提交(Commit),似乎不需要Add
操作,对于新创建的文件1.txt
会不一样,一般需要先Add
再Commit
,对于用惯了黑窗口的我来说,这里还是有区别的
这里我们直接点击大窗口下面的Commit
提交测试一番
在Message
里输入本次提交的名称,记得输入容易查找的名称,万一以后翻看日志如果发现都是 一对0102之类的会很崩溃
点击Commit
显示成功
在该窗口上有Push
按钮,不过一般我们需要先Pull
合并远程仓库的内容(除非是单人开发)
无论是Pull
还是Push
都需要选择正确的分支,即上图的RemoteBranch
,因为不同的分支是用于不同功能或者人员使用的,同时也需要比对本地的分支信息
拉取成功以后可以在窗口按钮里找到拉取信息差异对比等,这个自行测试
然后是提交,一般选好分支,其他保持默认选项
先来一个所有功能的图
add
标记需要提交的文件,在GitBase
内是所有修改和新创建的都需要add的,在小乌龟里需要对新创建的进行add操作
创建新的分支和切换分支,类似GitBase
的git checkout -b 分支
/git checkout 分支
操作
回退操作,test
文件修改以后即红色感叹号的形况下,点击Revert
后见下图
选中点击OK以后就将此文件回退到之前版本
解决冲突,这个是新手非常头大的一个问题,也是经常会出现的问题
我在其他文件拉取了这个工程,然后对test
文件做了修改,然后回到此文件下同时对test
文件修改,这一操作就模拟了协作开发时的冲突问题
然后拉取以后就发生冲突了
然后点击resolve
选项进行处理
第一个选项可以看冲突信息,当然不是所有文件都可以看到;同时也可以在下图所示的地方选择使用哪个版本的内容
第3,4选项分别选择使用远程还是本地
解决完成后就再commit->pull->push操作,中间如果有警告出现可以忽略直接进行下一步
在合并分支之前,首先要确保本地有需要合并的分支信息,比如master
分支需要合并test
分支,但是test
分支是在远程电脑上创建的,本地还没有这个分支,那就先需要进行fetch
操作
然后就可以找到所有分支了
使用merge
操作就可以把test
分支合并到本地