如何设计一个易扩展的游戏技能系统?

简介:

如何设计一个易扩展的游戏技能系统?


技能没什么框架,只是有很多字段罢了,比如cd、施法距离、释放动画、飞行动画等等。。。其实游戏技能不是一直不是什么难点,毕竟根据每个属性实现逻辑就好了。

技能真正麻烦一点是其实是 所谓的“效果”。因为从很久以前,游戏设计的时候就把效果这个概念添加进来了。对于 游戏战斗对象主体,我们暂时叫做BattleAgent简称BA。影响BA的数据有很多,比如移动速度、攻击力、基础属性等等,影响的入口也有很多:

  • 技能
  •  buff/被动技能
  • 装备
  • 强化
  • 宝石

等等,而这些实际上从影响结果没什么区别。

首先我们先谈区别,对于这些数值影响,其实区别只有入口或者说是作用的方式,技能是BA(castor)对BA(target)释放造成的瞬间数值影响。

buff是castor对BA(target)安装后造成的持续数值影响,分为按时触发瞬发和持续修改数值。

装备是特定容器对BA持续修改数值。

所以这里游戏开发者们抽象出了 效果这个概念。

对与效果而言,只存在2个行为:

对BA产生数值影响

对BA撤销数值影响

所以效果最终定义为:


 
 
  1. interface Effect { 
  2.  
  3.     void cast(BattleAgent target); 
  4.  
  5.     default void reverse(){ 
  6.  
  7.     } 
  8.  

而对于其他功能实体来说,就可以简化为效果的容器:


 
 
  1. interface EffectContainer extends Effect{ 
  2.  
  3.     List getEffects(); 
  4.  

这样我们就只要定义不同效果容器就可以了,

比如技能:


 
 
  1. class abstract  Skill implements EffectContainer{ 
  2.  
  3.     public void spellTo(BattleAgent target){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.             effect.cast(target); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  

对于buff:


 
 
  1. class abstract Buff implements EffectContainer{ 
  2.  
  3.     public void update(){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.            effect.cast(target); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  

对于被动技能(其实也是buff):


 
 
  1. class abstract  BuffSkill extends Buff { 
  2.  
  3.     public void install(){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.             effect.cast(target); 
  8.  
  9.     } 
  10.  
  11.  
  12.     public void unstall(){ 
  13.  
  14.         foreach(Effect effect in getEffects()){ 
  15.  
  16.             effect.reverse(target); 
  17.  
  18.         } 
  19.  
  20.     } 
  21.  

装备同理被动技能,是不是很清晰?而对于复杂的技能效果,因为我们已经抽象出了Effect。

所以怎么实现也就很容易了!


 
 
  1. class DamageEffect implements Effect{ 
  2.  
  3.     private int damage = 100
  4.  
  5.     public void cast(BattleAgent target){ 
  6.  
  7.         target.hp -= damage; 
  8.  
  9.     } 
  10.  

看起来是不是很简单,我们来写个变羊。

这个技能包括 2 个效果 外形修改和属性。

1、外形变羊


 
 
  1. class ChangSheepEffect implements Effect{ 
  2.  
  3.     public void cast(BattleAgent target){ 
  4.  
  5.         target.gameObject = GameManager.getAnimeObject("sheep"); 
  6.  
  7.     } 
  8.  

2、攻击力和防御力变0 速度变慢


 
 
  1. class PropChangeEffect implements Effect{ 
  2.  
  3.     public void cast(BattleAgent target){ 
  4.  
  5.         target.atk = 0
  6.  
  7.         target.def = 0
  8.  
  9.         target.speed = 50
  10.  
  11.     } 
  12.  

就是这么简单,同学你明白了吗?

如果要深入一点的话,就是变羊是持续型的,到了时间会变回来。

所以我们要一个可以触发buff的效果:


 
 
  1. class TriggerBuffEffect implements Effect{ 
  2.  
  3.     BuffSkill buff = new BuffSkill (){ 
  4.  
  5.         public List<>getEffects(){ 
  6.  
  7.             return new List().add(new ChangSheepEffect()).add(new PropChangeEffect()); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  
  13.     public void cast(BattleAgent target){ 
  14.  
  15.         int time = 3000;//3秒 
  16.  
  17.         target.addBuff(buff,time); 
  18.  
  19.     } 
  20.  

然后把这个TriggerBuffEffect加到技能能上就ok了,就完成了一个可以变羊3秒的技能。


作者:suiling

来源:51CTO

相关文章
|
2月前
|
关系型数据库 Java 数据库
探索后端技术:构建高效系统的秘诀
在当今信息技术飞速发展的时代,后端开发作为软件架构中的核心部分,其重要性不言而喻。本文将深入探讨后端技术的各个方面,从基础概念到高级应用,帮助读者全面了解后端开发的世界,揭示构建高效系统的秘诀。
|
2月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
170 3
|
6月前
|
前端开发 JavaScript 测试技术
修改代码的艺术——如何高效开发、维护和重构复杂的现有系统
这篇文章回忆了作者在高三时期通过努力进入班级前列的故事,并引申到软件开发领域。作者指出,开发工作往往被认为困难重重,但实际上,通过良好的方法、设计和工具,可以提高开发效率和享受编程带来的成就感。文章以最近完成的一个复杂核心需求为例,详细介绍了如何分析、设计和实现这个需求,包括采用领域驱动设计(DDD)理念,数据库字段变更,代码实现,自动化单元测试,重构和代码维护的重要性。最后,作者推荐了几本关于软件开发的经典书籍,并鼓励开发者不断提升自己,以更好地应对挑战。
|
安全 Cloud Native 架构师
如何设计或选择合适的研发模式|学习笔记
快速学习如何设计或选择合适的研发模式
196 0
如何设计或选择合适的研发模式|学习笔记
|
安全 Cloud Native 架构师
如何设计或选择合适的研发模式 | 学习笔记
快速学习如何设计或选择合适的研发模式
如何设计或选择合适的研发模式 | 学习笔记
|
存储 安全 前端开发
内部系统界面设计【上】 | 问题与挑战
在企业中,生产力和效率就是一切。本篇文章中,码匠将带您深入探讨内部系统 UI 设计,具体我们会介绍内部系统界面设计以及它所面临的挑战。
399 0
内部系统界面设计【上】 | 问题与挑战
|
设计模式 内存技术
《游戏机制——高级游戏设计技术》一导读
本书将告诉你如何设计、测试及调整游戏的核心机制。这些理论适用于任何游戏—从庞大的角色扮演游戏(RPG,role-playing game)到手机休闲游戏,再到传统的桌上游戏(board game)。在学习过程中,我们会使用大量你可能已经耳熟能详的实际游戏作品作为案例,包括《吃豆人》(Pac-Man)、《地产大亨》(Monopoly)、《文明》(Civilization)、《星际争霸Ⅱ》(StarCraftⅡ)等等。
2685 0
下一篇
无影云桌面