基于行为树的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 ...
(译)快速入门Unity编辑器拓展(IMGUI)
前言
我的技能编辑器马上就要和大家见面了,正好最近几天编辑器拓展接触的比较多一点,就想着趁热打铁优化一下架构并且重置一波UI,因为本来的样子雀食丑的一,期间遇到了许多问题,在搜索Control IDs相关内容的找到了Bunny大神的这篇文章,他将编辑器拓展里一些十分晦涩的概念以及一些事件的运行流程都清晰的解读了,故翻译出来分享给大家。
本文翻译自:https://github.com/Bunny83/Unity-Articles/blob/master/IMGUI%20crash%20course.md
Unity的IMGUI系统非常简单,但功能非常强大。主要部分有:
OnGUI callback。此回调用于处理与GUI有关的所有事情。
与OnGUI关系密切的Event class。
GUIStyle class定义一个控件的外观。它实际上负责任何GUI的绘制工作。
GUISkin class这基本上只是一个预定义的控件样式集合,并且拥有一个自定义style数组,可以自由拓展。
GUIUtility与EditorGUIUtility。当使用GUILayout class时,不要忘 ...
Unity编辑器拓展Wiki开源项目,装得下,世界都是你的
前言
在座的各位,凡是做过Unity编辑器拓展的都知道其知识十分零散和细碎,如果平时没有积累和记录的话,制作一个工具往往需要百度谷歌很多次去查找某个实现,可以说异常折磨,我之前有写过一篇比较宏观的编辑器拓展总结:https://www.lfzxb.top/unity-editor-extension-base/ ,但也只是提供了一个大致的方向,涉及更加详细的实现却没有提及,这也不是我不想写,编辑器UI千变万化,雀食是没有办法用一篇文章全写下来。
我们仔细思考开发编辑器UI这个过程,我们得到了什么?
不,我们什么都没有得到,这种知识可以说不具备任何的迁移运用特性,雀食是这样的,我在学校写了一年的Unity编辑器拓展,在实习的时候写UE4的Slate直接麻了(当然也不排除是Slate过于博大精深导致的,懂得都懂,不懂的说了也不懂,利益相关,写完文章再匿了)。
凑巧,前几天一位朋友 @马三小伙儿 做了一次技术分享,就是将常用的编辑器拓展功能全部整合在一个仓库了,随用随取。仓库地址:https://github.com/XINCGer/UnityToolchainsTrick ,目前这个库 ...
Odin常用功能整理
视频:
正文
特性效果预览
新版本Odin提供一个AttributeOverView EditorWindow,专门用于预览各个特性的效果
通过Tools-Odin Inspector-Attribute Overview即可打开:
PropertyTree
一个超级厉害的属性树,可以支持任意类型(如果一些字段类型无法绘制,则需要添加ShowOdinSerializedPropertiesInInspector字段到根class上)在任意位置上的序列化显示,例如
123TargetData targetData = new TargetData();PropertyTree tree = PropertyTree.Create(targetData);tree.Draw(false);
另外也可以参考xNode的EditorWindow中的节点,也是这样实现的:
需要注意的是,这个PropertyTree并不会帮我们永久化数据,虽然他内部使用了SO实现,但是仅仅是内存中的,并不会保存到文件,所以临时的绘制可以用任意类,要求持久化的就必须是继承自SO的类。
如果想要针 ...