当前位置: 首页 > news >正文

(个人思考)游戏技能的实现

游戏技能实现的三种方式:

1.类似UE中GAS的方式,统一为Ability,并且不处理任何数据逻辑。

https://github.com/No78Vino/gameplay-ability-system-for-unity

2.类似双影其境那种, 简单直观,每个Ability都是独立处理响应、行为。

3.一个SkillController方式。 SkillController驱动所有Skill的更新,Skill+Buff系统去处理战斗内每个Entity的行为。

其实类似第1中方式。不过没有这么明确的限定“属性”一定要在GAS中的GameEffect中进行处理

 

主要目标:本文讨论第3种的实现方式的实现思路。本文并没有讨论“属性”的实现,没有讨论editor实现。

 

第一步:有哪些内容需要实现?

1.触发器

一个triggerCondition可以触发 triggerActionList

一个Skill可以有多个triggerConditionList

 

2.每个skill的状态和具体逻辑,和触发后的逻辑;

skill的Active状态,skill在Active状态下内部逻辑

 

3.每个skill之间的关系。

比如当active skillA的时候 会禁用skillB。

比如有active skillA的时候,不能active skillB

 

4.多个skill绑定ownerEntity

 

第二步:怎么实现

so : ScriptableObject的缩写

我们定义了一个SkillContainer的So,里面包含了所有信息。

1. 一个triggerCondition只是condition,并不关心触发后的triggerActionList是什么。我们使用组合的方式

1.1 triggerCondition是一个so

1.2 triggerActionList的element是so (eventData)。

像一些CommonAction由指定CommonActionSystem去监听执行,比如常见的消耗、发射单发子弹行为。

像一些特殊的Action由当前skill.cs去执行。比如 每隔1s生成一颗环绕的旋转球

 

在实现skill流程后,通过配置去映射流程的实现, 并且,配置去“配”一些通用的功能。 

 

2.skill的话需要定义

2.1

interface ISkill
{
bool Active { get; set; }
bool TryActivate();
void Deactivate();
void Tick();
}

2.2 trigger的action直接监听1.2中的 triggerActionEventData

2.3  针对快节奏的项目,而非大世界的项目。我觉得直接把所有skill看作permanentSkill就行了,如果不需要了,直接Deactive。

如果是战斗内new的skill,也没有问题。

最多在Deactive的时候,把可能的“大数据”给clear或者returnPool。

这样比较简单直接

 

3.skill之间的关系

当整体skill流程完成后,通过skill内的tag数据去做“流程内”的细节处理。

比如在TryActive的函数内,需要检测这个skill和owner active skillList之间的关系。

 

4.我们使用entity+component的方式,而不是面向对象的方式实现。那么我们定义system和component:

class SkillList: Component
{List<ISkill>
}

同时, SkillSystem去Update这个SkillListComponent

class SkillControllerSystem

 

http://www.rkmt.cn/news/24589.html

相关文章:

  • UUT = Unit Under Test
  • ubuntu系统中containerd的cni网络配置
  • 题解:P2672 [NOIP 2015 普及组] 推销员
  • 题解:P12128 [蓝桥杯 2024 省 B 第二场] 质数变革
  • winform+Task+async
  • 消防局的设立
  • 2025年精密弹簧厂家推荐排行榜,微型精密弹簧,不锈钢精密弹簧,高弹性精密弹簧公司推荐!
  • 2025网络推广服务推荐:云数智推,专业定制化营销解决方案!
  • 详细介绍:遥感目标检测数据集汇总,覆盖城市问题/工业安全/农业健康/室内场景……
  • 2025年氧化镁厂家最新推荐排行榜,活性氧化镁,肥料级氧化镁,优质供应与技术实力之选!
  • DAO模式代码阅读及应用
  • CSP-S2023题解
  • 2025年家居ERP/MES/CRM厂家推荐榜单,家居ERP系统,家居MES软件,家居CRM产品,全面解析与选购指南!
  • 使用autoDL gpu云服务器训练yolo的常用操作 - 东南西北风
  • 2025年通风天窗/排烟天窗/通风气楼厂家最新推荐榜单,屋顶通风器/顺坡气楼/10A/1型/TC5A/TC12B/屋脊通风天窗公司推荐!
  • 2025 年涡轮流量计厂家企业品牌推荐排行榜,揭秘行业前十优质品牌涡轮流量计公司推荐
  • 2025 年涡街流量计厂家企业品牌推荐排行榜,实力铸就良好口碑涡街流量计公司推荐
  • 2025解冻设备厂家推荐:科恩冷链低温高湿射频解冻技术领先!
  • 完整教程:Linux基本使用(Ubuntu)
  • 完整教程:基于蓝耘元生代MaaS平台DeepSeek-V3.2-Exp与V3.1-Terminus模型对比测评:性能相近,价格大幅下降
  • JAVA基础的ATM机存款项目
  • 实用指南:Matlab通过GUI实现点云的GICP配准
  • 2025年粉末涂料厂家推荐排行榜,广东粉末,绝缘粉,钣金粉,烤漆粉,专业品质与市场口碑深度解析!
  • 【容器日志采集】【 四】消费kafka保存到es
  • 嵌入式实验3串口通信---任务二串口传输文件实验
  • 【容器日志采集】【三】创建daemonsets采集日志发送到kafka
  • 2025年保洁公司权威推荐榜单:驻场/钟点/开荒/外包/商场/办公楼/工厂/医院/企业保洁服务优选指南
  • 深入解析:Spring Cloud Netflix Eureka:从微服务基础到高可用集群实战
  • 别看我只是一只羊
  • 2025年智能照明系统/模块厂家推荐排行榜,工厂/改建/车间/高亮/高光效/泛光/免维护/投光/大功率智能照明系统/模块公司精选!