开始编写GameAbility相关逻辑
前言
本人最近看了GameplayAbility的wiki与官方的ActionRPG案例,大致对此有了一定了解。所以在此分享相关经验顺便作为学习笔记。
wiki采用了第三人称模板来进行讲解。讲解了几个主要类的概念、参数以及用法。
ActionRPG则是一个较为完整的案例:它通过c++ 往几个GameplayAbility的基础类中添加了若干逻辑,使得之更加适合于RPG项目。大部分改动都很不错,甚至直接复制,让它作为你的RPG模板都是没问题。它的主要逻辑以及表现都在于蓝图中(技能与效果),所以它也是一个c++与蓝图结合开发的好例子。(注意:GameAbility无法完全通过蓝图开发)
所以接下来我也会适当讲解actionRPG的结构。
注意:有关网络同步的我都会略过。
使用Gitlfs对uasset、umap等二进制文件进行版本管理
前言
因为GameplayAbility属于蓝图c++混合编程框架,所以对蓝图类与地图进行版本管理是十分重要的事情。所以本文将在这里介绍git的二进制文件版本管理方案。
基于插件的StaticMesh多Pass绘制方案
前言
StaticMesh与SkeletalMesh的实现方法比较类似,不过两者的绘制方式有很大的不同。不过庆幸的是,Static的MeshBatch设置在绘制函数的外面。
Qt On Android 隐藏状态栏的方法
注意点
隐藏状态栏时,第一个界面不能使用Qt设计师界面类(创建项目时,不勾选创建界面选项)。不然以下方法皆会无效。
UTexture2D的读取与写入数据并且保存成Asset
UTexture2D的读取与写入数据
在阅读@YivanLee的文章
https://zhuanlan.zhihu.com/p/45171840
我发现“向UTexture2D写入数据”这节有些纰漏:
- 作者没有说明Texture2D->PlatformData->Mips[0].BulkData.LockReadOnly()返回空指针的详细情况。
- 作者实现的写入是临时性的。
在查阅国外资料时,我在isaratech的网站里找到解决方案,在此我将进行简单说明。(原文地址在结尾会介绍)
(虚幻4Shader篇)开始编写ComputeShader
本文的大部分代码参考@YivanLee的文章,特此说明
有关ComputeShader的原理解释可以参考:https://zhuanlan.zhihu.com/p/36697128
这从此文可以得知ComputeShader是并行渲染的,所以需要设定UnbindBuffers。他与别的Shader通过RenderTarget交换数据。
(虚幻4Shader篇)向Shader传递数据
基础类型数据
Shader中的基础类型数据,例如:int、float4等的传入方式如下:
- 在你声明的Shader类中声明FShaderParameter变量。
- 在构造函数中绑定Shader中的变量。
- 在序列化函数中添加声明的FShaderParameter变量。
- 实现自定义的设置Shader变量函数,并在最终绘制前调用。
(虚幻4Shader篇)开始编写最简单的Shader
前言及学习建议
本人最近在学习UnrealEngine的GlobalShader,在这个过程中阅读了@YivanLee的Shader系列文章,大大提高了学习速度。但这些代码大多基于4.19,其中部分代码将会被废弃,所以我撰写这篇在此分享4.22版本的GlobalShader相关经验。
本文意在理顺思路,教会读者如何搭建基础的Shader测试环境,顺便总结学习心得,所以本文不会将所有代码贴出,详细代码请参考github。
大部分内容解释还请参看了@YivanLee的文章,我认为重复造轮子没有意义。具体代码可以参考我的github,读者可以按照commit一步一步学习代码:
https://github.com/blueroseslol/BRPlugins