从多角度看易扩展的游戏技能系统设计

从多角度看易扩展的游戏技能系统设计

ID:38755832

大小:28.03 KB

页数:6页

时间:2019-06-18

从多角度看易扩展的游戏技能系统设计_第1页
从多角度看易扩展的游戏技能系统设计_第2页
从多角度看易扩展的游戏技能系统设计_第3页
从多角度看易扩展的游戏技能系统设计_第4页
从多角度看易扩展的游戏技能系统设计_第5页
资源描述:

《从多角度看易扩展的游戏技能系统设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、从多角度看易扩展的游戏技能系统设计一个好扩展的技能系统能让技能、BUFF、道具之间的关系能够很好的表示和调整,对游戏开发而言无疑是减少了不少的加班时间。那么要怎么设计一个易扩展的游戏技能系统呢?游资网从游戏策划、程序和玩家这三个角度进行整理:策划角度:作者:猴与花果山感觉这个问题很久不提了但是还是值得拿出来探讨下。我花了至少5年在设计和实践(我自己经历了大小7个项目,虽然大多最后因为其他原因都没上)这样一套机制并且可以说基本解决了这个问题!我并不想藏着他,我也和很多朋友分享了,同时也感谢他们提出了很多意见,包括细节和优化等方面

2、,正因为互相之间的借鉴和交流,我到今天已经把这套机制归纳的非常好了,还是想把它分享给更多想做好游戏的人,希望大家能进一步交流,把它更完善化,以形成一种规范,这套机制适用于任何类型的游戏开发,因为他是一个很棒的思路。首先分析一下可扩展性:我从一个设计师的角度来看,所谓的可扩展性是——你并不知道策划下一个设计的是什么,但是你需要在尽可能不改动核心代码的基础上去把它实现了,并且在调试的时候(甚至是上线之后要做调整的时候),你可以并不伤筋动骨的去修改它。这里除了你要有好的代码规范外,还需要抽象一套机制来实现它。实际上,好的策划的脑洞是

3、非常大的,你真不知道他会设计出什么样的技能,但你并不能说一些设计因为无法实现就理所应当被埋没了,(我对策划设计Dota类游戏的思路要求是开放的,发挥想象力的,因此我想了这样一个机制:[设计思想]游戏系统设计思路的牢笼一味追求实用性他们的核心在于:明确区别了AOEBuff和技能3块,策划应该从这个角度出发思考问题。这既然是一套机制,你可以把它用在任何游戏的框架当中。比如我要做一个Dota传奇的卡牌游戏,一样可以用这套机制,但是核心在于——你的策划要有能力归纳出游戏中的回调点。当然我们在使用这套机制的时候,逻辑上实现并没有任何问

4、题,但是我们一样会遇到一些从逻辑变成动画的困难,尤其是当我们的战斗在服务器上一瞬间完成了,但是要把结果告诉客户端吗,并且有客户端重新验算一遍的时候,因此我在之后有总结了一套作法,来完成这个事情:手游回合制游戏战斗机制归纳式设计这个解决的是,当你有各种有趣的buff,但是又想不大改客户端的时候,你应该这样去建立这个框架。你可以想象如果你做一个MT类型的游戏,战斗是服务器一瞬间的,但你又要客户端重演,我们举个例子:比如我门设计了在MT类型游戏中加入地形因素:可以有火海,火海每回合开始的时候对所有场上敌我英雄造成火焰伤害。然后有个英

5、雄是一只凤凰,凤凰有2个被动效果:受到火焰伤害的时候变成治疗自己相当于伤害值的血量。战斗中第一次死亡可以复活,回复最大生命值50%,如果在火海中则回复100%。这样一个英雄和地形,我们如何实现呢?如果你看了我上面的几套机制,并且理解了,那基本没有难度,你根本不需要硬编码。但这里有个问题,我如何让客户端重现?这就是上面这篇说的关键了。程序角度:作者:扼杀黑暗技能没什么框架,只是有很多字段罢了。比如cd施法距离、释放动画、飞行动画等等。。。其实游戏技能不是一直不是什么难点,毕竟根据每个属性实现逻辑就好了。技能真正麻烦一点是其实是所

6、谓的“效果”。因为从很久以前,游戏设计的时候就把效果这个概念添加进来了。对于游戏战斗对象主体,我们暂时叫做BattleAgent简称BA。影响BA的数据有很多,比如移动速度攻击力基础属性等等,影响的入口也有很多:技能buff/被动技能装备强化宝石魂等等,而这些实际上从影响结果没什么区别。首先我们先谈区别,对于这些数值影响,其实区别只有入口或者说是作用的方式,技能是BA(castor)对BA(target)释放造成的瞬间数值影响。buff是castor对BA(target)安装后造成的持续数值影响,分为按时触发瞬发和持续修改数值

7、。装备是特定容器对BA持续修改数值。所以这里游戏开发者们抽象出了效果这个概念。对与效果而言,只存在2个行为:对BA产生数值影响对BA撤销数值影响所以效果最终定义为:interface Effect {    void cast(BattleAgent target);    default void reverse(){    } } 而对于其他功能实体来说,就可以简化为效果的容器:interface EffectContainer extends Effect{   List getEffects(); } 

8、这样我们就只要定义不同效果容器就可以了,比如技能:class abstract  Skill implements EffectContainer{     public void spellTo(BattleAgent target){       foreach(Effe

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。