基于行为树的MOBA技能系统:碰撞系统
前言
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
一些游戏中简单的碰撞系统,可能就是手写几个圆形,矩形,扇形就够用了,但是Moba类游戏很多技能碰撞体是畸形的,比如派克的R,男枪的Q,R等都是不规则的,所以我们需要一个稳健的物理库来支持这些,自己处理碰撞体顶点数据,创建碰撞体到物理世界中,因为游戏类型原因,我选择了Box2D:https://github.com/erincatto/Box2D,对于FPS游戏,只有Bullet(3D物理库):https://github.com/bulletphysics/bullet3 可选,这里就不多说了。
由于碰撞系统本身需要和技能系统产生非常紧密的联系,所以涉及到的内容也会比较多,主要包括
Box2D物理库介绍
Box2D碰撞体编辑器拓展,负责制作碰撞体和导出碰撞体数据:https://www.lfzxb.top/box2d-unityvistualeditor/
Box2D碰撞关系编辑器拓展,负责维护碰撞体之间的碰撞关系,并自动生成代码:https://w ...
基于行为树的MOBA技能系统:数值系统
前言
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
在战斗系统中数值系统也是一个核心的系统,当今主流做法是将一个属性分为两个相关联的属性,比如最大生命值就会被分为基础最大生命值 + 额外最大生命值两者之和
基础最大生命值一般而言是初始恒定的
额外最大生命值一般而言是受英雄自身属性,等级,装备,Buff影响的,比如对于力量英雄而言+1力量会为英雄提供20最大生命值,提升一级会为英雄提升80最大生命值,一件装备会提升20%额外最大生命值
其他的例如攻击力,移速,魔法值,法强,护甲,魔抗等都是如此。
此外,还有常见的伤害处理,减速处理等间接影响属性的类型。
分类
战斗数据处理主要分为两大类
直接作用于属性上,例如最大生命值,魔法恢复速度,移速等
间接作用于属性上,例如伤害,减速,魔法消耗等
并且直接作用复杂度 < 间接作用复杂度
由于间接作用类型的存在,我们就不能用诸如
final = ((base + add) * (100 + pct) / 100);
的形式来处理属性变更了,我们需要找到 ...
基于行为树的MOBA技能系统:技能系统与网络同步
前言
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
从我个人的感受而言,如果说技能系统开发难度为7,那么网络同步的开发难度就是10,因为它的触手涉及技能系统方方面面,稍有不慎就会有可怕的连锁反应导致混乱。
包括守望先锋的三面分享,其中网络同步部分读起来最为吃力,断层的感觉最强,但越是这样,越能说明守望先锋网络同步方案的健壮性
对于本文内容的拓展延伸与具体实现,参见
基于行为树的MOBA技能系统:基于状态帧的战斗,技能编辑器与录像回放系统设计
基于行为树的MOBA技能系统:基于状态帧的战斗,技能编辑器与录像回放系统开发手札
本文大量内容参照了:《守望先锋》GDC2017技术分享精粹重制版总目录 中的文章
守望先锋网络同步总结
同步数据设计
感觉先说明一下网络同步环境和数据结构的设计比较容易理解一些
客户端和服务端都各自维护着整局游戏所有的实体和数据,差别就是客户端不负责逻辑计算,逻辑计算是服务器权威的,客户端要能从服务器发来的帧数据恢复到和服务器发送数据那一帧相同的世界状态
对于客户端来说,本地有 ...
基于行为树的MOBA技能系统:状态系统
前言
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
这一篇来说一下战斗系统中的状态系统,我们在游戏中的眩晕,移动,禁锢,灼伤,吟唱,攻击。。。几乎所有的行为和表现都可以抽象出一个状态,所以宏观来看,状态系统会和动画系统,技能系统,Buff系统产生交互,所以设计一个健壮,功能全面的状态系统是必要的。
需求分析
我们先来分析需求
动画系统
首先是最简单的,动画系统相关的状态设计,很多情况下,我们需要当前状态结束后回溯到前一个状态,例如Idel->Run->Idel,就是一个很好的例子,所以我们需要设计一个逻辑类似栈的状态容器(有学名的,叫“下推自动机”),在Remove一个状态的时候,前一个状态就会到栈顶,作为人物当前状态。
事实上这个栈式的逻辑在其他地方也适用,比如一个人物目前是冲刺状态,会一直朝着前方冲刺,但是会被禁锢技能给禁锢在原地,禁锢效果结束后继续往前冲刺。
技能系统
这里的技能系统指的是我们技能Canvas的“行为树区域”控制的那部分逻辑,也就是技能的运行逻辑,运行到某个节点, ...
基于行为树的MOBA技能系统:总目录
两年磨一剑,梦似已实现
2018年5月,我正式接触Unity游戏开发,学习了一段时间的Unity基础后,开始接触设计模式,游戏框架等知识,在此过程中,数次听到他人谈论战斗系统等相关内容,因为我自己玩Moba游戏多一点,对此也是非常感兴趣,几乎他们每次讨论我都在学(kui)习(ping)。虽然一开始从别人那里学到了很多新的概念和做法,比如Excel表可以导出数据给游戏用,但总感觉他们讨论的开发技能的方法不够灵活。直到有一次我在ET框架游戏交流群听到了群主基于行为树的技能系统的概念,虽然只有寥寥几句,但当我搜索了一下行为树后,我激动万分,没错,这正是我所追求的极致。
在网络上搜索相关关键字却一无所获,但是顺带搜索到了《守望先锋》技术团队在GDC2017分享的三部曲,其中技能系统和网络同步的相关内容让我受益匪浅,我的很多设计就是借鉴了其分享内容,知识积累已经差不多足够我去完成这个大工程了,心意已决,开干!
2019年4月,我创建了仓库,并取名为NKGMobaBasedOnET(之所以叫这个名字原因有二,其一高中开始一起玩LOL的同学们昵称前缀是NKG,其二项目是基于ET框架开发的),提交 ...
基于行为树的MOBA技能系统:技能系统与可视化节点技能编辑器
前言
基于行为树的Moba技能系统系列文章总目录:https://www.lfzxb.top/nkgmoba-totaltabs/
在开始正文之前感觉还是有必要说明为什么需要开发基于行为树的可视化节点技能编辑器(本文简称技能编辑器),并且推荐大家去看下我之前写过的一篇回答:unity怎么去实现act战斗?
试想一下,英雄的技能多种多样,很多技能释放的流程,产生的效果都不一样,可以简单纯粹到如蛮王Q技能的主动回血(泰达米尔消耗怒气,回复生命值),也可以像瑞文那样的三段Q那般复杂(锐雯向前直冲,发起突袭。这个技能可以再次施放另外的2段。 第一段和第二段:向前斩击,对接触到的所有敌人造成物理伤害。 第三段:跃向空中,随后猛击地面,造成物理伤害,并且以冲击点为中心,将周围的敌人击飞。),或者像诺克萨斯之手那让人头痛的被动(在德莱厄斯用斧刃对敌人造成伤害时,敌人会流血,在5秒里持续受到物理伤害,最多叠加5次.
只要有一名敌方英雄身上的【出血】效果叠到最大层数,或死于【诺克萨斯断头台】 ,德莱厄斯就会获得【诺克萨斯之力】,持续5秒,获得额外攻击力,并对命中的敌人施加最大层数的【出血】效果.), ...
常见游戏特效学习与实现
前言
最近打算学习下特效部分,因为现在我的热饭班长血怒特效很挫,长这样
但是人家应该是这样的
虽然说热饭班长没有Shader撑牌面,但就算加上Shader感觉也比不上原版那么霸气,而且有很多奇怪的贴图我都不知道怎么用,比如
我直接黑人问号脸,所以来学习一下
本文大部分内容都收集整理自realtimevfx网站,也推荐大家去这个网站学习特效制作,大佬作品和教程非常多!
正文
特效是Textures,Sprites,Meshes,Lights和Shader一起配合而创建的酷炫效果。
在特效制作工作流程中,特效纹理是决定最终特效质量的最重要的其中一环,它的制作通常与游戏的风格有很大的相关性,Jason Keyser’s LoL FX breakdowns 频道有很多非常好的示例
VFX的五大艺术准则
Gameplay
特效的制作要去迎合Gameplay,让Gameplay对于玩家来说更加清晰明确,反馈性更强。这一点在许多文章,视频,PPT都有提及,举个例子,LOL中提莫的蘑菇爆炸的时候要播放特效,老版本的蘑菇爆炸特效和欧米伽小队的爆炸特效完全不一样,一方面是特效的质量,另一方 ...
2021.5.1日记
我从年后到现在渲染方面的学习投入的精力比较多,所以相对于之前搞GamePlay有更多的时间(因为脑子不是很灵光,一些算法和公式要学习半天甚至几天的时间,学习嘛,懂得都懂,东摸摸西躺躺,时间就过去了)来胡思乱想,最近对自己人生规划的思路越来越明确,并且我本身也并不排斥这个已经成型的思路,所以来做个记录。
这个思路之所以会形成,主要原因是随着自己见识到的知识面越来越广,越来越能清楚的认识到自己的水平,以及自己想要达成的目标,或者说自己能够达成的极限。
我不是什么天资聪颖之辈,相反我觉得自己脑子很多情况并不是很好用,对,脑子不好用就是我给我自己的定位,或许有人觉得我在装X,但我说的句句属实,没有人比我更了解我自己,我现在所有的知识和作品都是靠堆时间一点点死磨出来的,这些内容,花费了他们本不应该花费的大量时间,比如内容A学习和掌握完全可以从半天缩短到三个小时(这不是以现在的目光看待过去,与经验无关。纯粹是自己少了一点灵性),但我却完全做不到,因为理解能力和思维能力只有这个程度,感觉大部分人如果跟我走一样的路线,效率和结果会远好于我。
所以我的学习能力基本上就是这样,不高不低都是抬举我了,实际 ...
ET6.0接入ILRuntime
前言
当今市面上热更新方案百花齐放,有用lua的(xlua,tolua等),有用js/ts的(puerts),有用C#打补丁修复的(InjectFix),还有C#转Lua的(CS2Lua)而他们或多或少都有自己的痛点和不方便的地方。
ILRuntime 则是将痛点与不方便降到最低的,它是一个纯C#的热更新方案。借助Mono.Cecil库来读取DLL的PE信息,以及当中类型的所有信息,最终得到方法的IL汇编码,然后通过内置的IL解译执行虚拟机来执行DLL中的代码来实现热更新功能。
ET框架 也是前阵子更新到了6.0版本,简单概括一下是一个客户端 + 服务端的纯C#双端框架,总体架构是一部分ECS,一部分OOP,一部分组件式编程,各取所长,可以说平衡的非常好了,网络架构是高效的分布式架构+Actor模型内网通信机制。毋庸置疑的是,框架是非常优秀的,但是由于作者的游戏临近上线比较忙,热更新模块还没接入。而且作者似乎更偏向CS2Lua一些,感觉有点可惜,考虑到自己和其他一些想继续使用ILRuntime热更的朋友们,遂有此文。
(对于ILRuntime 和 ET框架 不了解的朋友可以直接点击 ...
URP下屏幕空间平面反射(ScreenSpacePlanarReflection)学习笔记
前言
继续学习Colin大神的渲染示例库,这次学习的是屏幕空间平面反射(ScreenSpacePlanarReflection),一个可以用在移动端的平面反射库,但是对图形API有要求,PC/console/vulkan android/Metal iOS,OSX,因为其中用到了Compute Shader加速计算。项目还对不同平台做了差异化处理,干货很多。
学习过程中我也有很多疑问,有一些是百度谷歌看PPT解决的,有一些就实在不知道怎么办了,在文中有说明,望知道的大佬能不吝赐教。
正文
Compute Shader
简单来说Compute Shader是运行在GPU中的计算管线中的程序,其与渲染管线相互独立,旨在将任务切分成一个个运行单元,然后充分利用GPU的并行计算能力来提高目标的运行效率,也是现代GPGPU(General Purpose Computing on GPU)的基石。
其应用起来的相关概念用一张图即可概括(有一说一这张图感觉比NVIDIA的好看和明了多了,AMD YES!):
有关Compute Shader的更多内容参见:知乎文章:Compute Sha ...