-
C++多态库Proxy学习笔记(一)
本文是C++20标准下微软提供实现多态能力的头文件库的学习笔记。当前网络上虽然有很多相关文章了,但是本文侧重点除了学习库怎么用以外,还深入探讨Proxy库用到的C++14、C++17、C++20等的特性,学习Proxy是怎么实现的。…
-
Lyra Vs. ALS
ALS是UE4及之前版本流传极广的一款动画设计方案和模板,其设计优秀到被几乎除Epic外大部分重度射击、动作游戏项目引用。Lyra是UE5新推出的TPS射击游戏小样,其中使用的动画设计方案不仅全方位使用了新引擎的动画技术细节,更是在运行性能和设计解耦方面有着非常出色的指导。本文主要分析和对比一下两者之间的差异。…
-
提升URO优化时的动画表现
URO是一个常用的减少动画开销的优化方法,但是它会降低具体的动画表现。本文提供一种主线程增加极少开销的动画表现增强方案。…
-
UE Delegate Bind的冗余复制问题
起因是发现动画实例在初始化时,创建和绑定本地委托太多,导致耗时太久。…
-
ALS角色状态机设计
以下是学习ALS(Advanced Locomotion System)的第二篇笔记。文章主要分析ALS多层状态机设计模式与意图,目的是由简到繁,力求表达如何根据需求不断改进动画设计和其表现。…
-
UE动画蓝图和动画节点拆解
以下是学习UE动画蓝图和其实现的一些技术细节。…
-
UE ALS学习笔记之基础运动动画控制
以下作为学习ALS(Advanced Locomotion System)的笔记,相比于网上其他大佬总结的ALS教程“它是什么”,本文侧重于“尝试猜测ALS为什么这么实现,想解决什么问题”。因为作为UE初学者,相比于蓝图,我更容易理解代码逻辑。所以本文除了基于原始ALS插件的对比与学习以外,主要还是依据ALS-Community以及其C++逻辑实现来分析的。…
-
基于相似帧的动作融合与动作匹配的小样
本文使用向量余弦判断相似的方法,来选取两个动画中最接近的一帧进行融合,以达到相对流畅的融合效果。另一方面对于一段循环动作,根据当前运动姿态来自动匹配最佳的动画片段。…
-
子弹、手雷、投掷物系统
背景与需求作为射击游戏里的核心功能,子弹要承担很多重要表现和逻辑判定。这里的子弹是游戏里广义上所有具有飞行和物理碰撞判定的功能,同时也把激光当成一个速度无限大的连续多发的特殊子弹。当前设计里除了对子弹提出了多种运行轨迹的要求,还要尽可能模拟相对符合直觉的物理表现以及碰撞反弹效果。尤其是引入空气阻力的概念,给玩家制造一种子弹飞行远处下坠感强烈而近处射击相对平直易于瞄准的手感。最后多玩家多怪物在游戏过程中随时会发射大量子弹,因此子弹系统的性能也是一项必要的考虑内容。方案与选型当前项目使用Uni...…
-
射击MMO手游里的惯性参考系
本文主要讨论在射击游戏里实现一个具有惯性参考系的位置、射击、技能、特效和IK功能的同步系统…
-
Lua Table的访问局部性测量与优化
本文先对Table的访问局部性进行测量,然后再基于这个特性来指导优化脚本的运行性能。…
-
Lua Table的能耗分析
本文主要对比分析Lua 5.1.5和LuaJit 2.1.0-beta3这两个版本lua虚拟机对于Table的实现以及测量它们各自的插入与删除表现。…
-
项目的分支与同步
我近两年来经历了从演示到枪毙和从验证到上线两个不太完整的项目开发。发现在这个过程中由多人协作而产生的功能合并和分支合并问题,越到后期、临近上线、无暇解决问题的焦虑时刻时,就越严重、越恶劣。本文主要想总结之前遇到的问题,并尝试讨论缓解这些的问题。…
-
I18N的苦难之旅
I18N看似是一个不太难的问题,每个人都可以通过短暂的思考就得到的一些方法:文本资源化,具体文本与逻辑解耦,运行时切换语言资源,巴拉巴拉巴拉。但是这个方案应可以应对项目功能的演化、文本规模的膨胀、性能与内存的优化需求么?…
-
客户端程序员视角下的任务系统
任务系统是一个协作人数多,与其他系统交互多,逻辑复杂且分散,后续修改多的系统。在设计任务系统数据和逻辑时,必须要考虑如何稳定高效准确的向其他同事传播明确具体数据规则与逻辑意图。本文梳理了一些当前工作中任务系统的分类以及与其他系统的关联性。列举和分析遇到的困难与问题,并尝试针对这些问题进行讨论对应的简化优化办法。…
-
Lua中状态量的比较模式
学习lua快半年了,看了两个不同组里使用lua比较常量的习惯: 直接字符串比较,类似state == 'OpenState'这样的形式 在lua中构造一个类似枚举的全局变量table,类似state == WINDOW_STATES.OPEN_STATE,其中WINDOW_STATES是注册的全局table,state和OPEN_STATE是整数类型…
-
C# Struct的复制性能
开始用class和float[]写了一个Matrix类,后来担心GC开销,于是用struct重写了一个固定大小的Matrix4x4。结果表明CPU占用率上升了但是实际性能下降了,那么,是因为struct作为函数参数多次传递引发额外复制造成的么?在C++中,常规的使用方法是使用const T& 常引用的办法来避免额外的复制操作,而C#中只有ref,而没有常引用。那么就先使用ref作为替代研究一下。先看Matrix4x4的定义public struct Matrix4x4{ pu...…
-
C#和C++11的Lambda闭包性能对比
Lambda表达式和闭包是比较方便的语法糖,但是它对C#和C++11会分别有多大的开销呢? 更新关于delegate的内容,在C#结论后面 C# 使用QueryPerformanceFrequency来计时,C++11使用chrono::high_resolution_clock::now来计时 C# 使用VS2017 框架.Net 4.6.1 Release编译,首选平台是Any CPU,允许不安全代码。 C++使用VS2017 Release Win32编译,\O2 \Oi ...…
-
矩阵转置的效率验证
近期在学习矩阵运算的轮子,其中要做矩阵的转置。我第一个想法是新建一个矩阵,然后把要转置的内容复制过去。后来又有点犹豫,新开辟一块内存是不是不如在原位交换各个数值,再交换一下行列效率高呢?…