技能系统的数据结构

前端之家收集整理的这篇文章主要介绍了技能系统的数据结构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

问题1. 技能如何储存和调用

游戏中上百个技能是如何储存的,如果调用的,不会是一起加载,if判断一个一个的吧?

注:下方回答中蓝色的字体是我们游戏中的做法

回答一

主流的做法是通过 Add Buff 和DeBuff 来实现的,下面简单Buff的释放方式

最简单的Buff需要有如下通用属性

1、生效时间->在添加到对象上后,作用的时间长度,一般有立即作用,延迟一段时间生效等等

2、作用时间->指该Buff在对象身上作用的时间,生效后立即完全,如普通攻击,还有持续作用的,如中毒后持续扣血,眩晕等等

3、作用对象->某些技能制定的对象的类型,如火球可能对熔岩巨人无效,就会在该中体现(注:我们的技能比较简单,Actor中有一列SkillId对应Skill表中的Id,未有此种特殊情况)

4、作用方式->Buff会修改对象的哪些属性,如果增加火系列武器攻击力,中毒Buff可能会直接扣一定量的HP,以上几种是常见的Buff属性,Debuff也类似,之前可能通过策划填表实现,现在很多团队使用 LUA 脚本来实现(注:关于如何AddBuff,我们有一张Buff表,这张表里由策划填写,比如:策划想添加一个Buff:刀系列的武器 ATK 上升 20% ,那么他只需要填写这两列:MethodName:WeapontATKUpArgs:WeaponType|UpValue[方法名 参数1|参数2],然后程序解析Tab表,通过C#的反射执行 MethodName 方法,并传入相关的参数,这样这个Buff就实现了。考虑后面的运营需求,现阶段我们也正在加入 LUA 来调用C# 的方法,达到动态更新脚本的目的)

除了 buff 之外,技能还有一些其他的要素

比如 瞬发技能,持续施法技能,每个技能还有前摇等要素需要考虑,这些通常放在每个具体的技能逻辑内实现

再有就是AOE技能,可能需要在制定的范围内查找攻击对象,这部分逻辑也会放在技能内实现,如果想了解更详细的,可以参考 Mongos的相关逻辑,国内厂商的相关逻辑或多或少和Mongos有相似或雷同。

回答二

技能是个对象,上面有些基本属性,技能只提供最基本到主流程,如引导时间,命中时间,命中次数。当技能发动时只在各个流程命中时抛出消息,各个消息节点上可以让策划插入各种事件,比如当技能读条开始时给自己加个 魔免buff,命中敌人时给自己加血,同时召唤出两个幻影。程序只需要生产,加血,分身,甚至改变天气之类的技能事件,策划通过技能编辑器组装出理论上无数种技能。(注:我们的项目现在还没做技能编辑器,现在阶段是有三张表:Skill,Buff,Bullet,具体为Skill可以AddBuff,也可以发出 Bullet,Bullet遇到Actor 引爆 再AddBuff;关于事件,Skill表有:发招前事件(包括预备动画,预备特效),发招中事件(发招中动画) 发招后事件(进入CD))

回答三

技能是通过一系列的触发条件组合起来的一个事件集合。不仅仅是BUFF这么简单,灵活点的做法是把技能描述层,技能本身属性层和效果层分开来处理。因为有时候一些道具也会产生相应的效果,这个时候单独做表就很混乱了。
然后通过ID来填写这ID对应的描述,属性效果,研发照着ID按图索骥实现具体效果就可以了。

猜你在找的Unity相关文章