找回密码
 立即注册
首页 业界区 安全 【图解】AIGC时代的游戏抽象设计:万物皆ID、万事皆事件 ...

【图解】AIGC时代的游戏抽象设计:万物皆ID、万事皆事件、万人皆数据

暴灵珊 3 天前
一、前言

在AIGC时代,我们总想AI能帮我们开发游戏,但是让AI编写游戏代码还是很难达到预期,尤其是大数值体系的游戏。
本文用图示的方式介绍游戏的抽象设计,可能有些思路让你耳目一新。在代码和AI之间根据游戏特征做进一步规范化的业务抽象会不会提高AI的成品率?
二、抽象

抽象有高低之分,越接近个性的抽象适应性越弱。
1.png

图1 两个抽象高度的框架
2.png

图2 抽象、分层、模块化三、万物皆ID

当ID统一的时候,你会发现很多事情都很好做。
统筹配置文件的ID段(位),实例(生产)ID再使用64位的(如雪花算法),避免了每个配置表都有相同的ID:
3.png

图3三、万事皆事件

事件是游戏活动的驱动源。动作执行、数据改变都会触发相应事件:
4.png

图4三、万人皆数据

数据是游戏实体对象的个性化体现。
把普通怪、人形怪、地上物品、随从、玩家都抽象成最高集成的地图实体,那些低级实体只不过少某些配置而:
5.png

图5把药品、道具、武器、服装、货币都抽象成物品对象,非武器类物品只不过没有对象仓库而已:
6.png

图6综上,一个实体对象终极抽象模型:
7.png

图7这时候再使用ECS架构来设计游戏就显得更加容易了。
四、“生产-消费”模型

游戏一大特征:消耗什么给予什么。即消耗数据副本(如:等级>100)、消耗数据实例(如:经验值-100)、消耗物品实例(如:金币-10),给予数据加成(如:攻击+10)、物品奖励(如:灵芝+10)、动作允许(如:跳转(广寒宫))。
游戏的生产—消费模型:
8.png

图8条件-动作表达式配置范例:
9.png

图9基于图8的模型,依托图7的数据仓库和再设计一个函数库,条件表达式和动作动作表达式就能满足多数的业务场景需求了:“条件系统”+“成长线框架”+“若干模块配置表”就能满足了多数的成长线功能需求,而且能留给策划更大的想象空间。
五、业务抽象

凡是策划的需求都是游戏的个性化体现。配置表抽象能解决80%的策划需求(操作配置表工作效率高),脚本功能抽象可以补足20%的特殊需求。
10.png

图10业务抽象细则:
11.png

图11如果图11所示,脚本可以弥补配置表的不足,但脚本开发工时和准入门槛稍高。技能、活动、刷怪、掉落等业务功能同理。
六、模块化配置

每个类型的配置表都可以有子表,如:变量总表:var.csv,技能变量子表:var_skill.csv。其它类推,即可按目录来实现模块化配置(各模块分配好ID段即可):
12.png

图12七、表达式解析和执行
  1. # 1、初始化名字系统(id-name,这是id统一的好处之一)
  2. names.add(cfg.loader("var.csv", "cfg_id", "cfg_name"))
  3. names.add(cfg.loader("map.csv", "cfg_id", "cfg_name"))
  4. names.add(cfg.loader("item.csv", "cfg_id", "cfg_name"))
  5. names.add(cfg.loader("monster.csv", "cfg_id", "cfg_name"))
  6. names.add(cfg.loader("skill.csv", "cfg_id", "cfg_name"))
  7. # 2、加载、解析监听表达式(自动模式)
  8. pairs = cfg.loader("growth.csv", "cond_exp", "action_exp")
  9. cond_sys.listen(names, pairs)
  10. # 3、加载、解析监听表达式(手动模式)
  11. pairs = cond_sys.paser(names, cfg.loader("growth.csv", "cond_exp", "action_exp"))
  12. #玩家请求
  13. player_request(player, id)
  14. {
  15.     pair = pairs[id]
  16.     # 检查条件表达式
  17.     if cond_sys.check(player, pair.cond)
  18.     {
  19.         # 执行动作表达式
  20.        cond_sys.exec(pair.action)
  21.     }
  22. }
  23. ...
  24. # 表达式执行方式(有了统一的ID规范,可以提高表达式执行性能):
  25. # 表达式原型:
  26. 当前地图=广寒宫 and 杀怪=北帝
  27. # 表达式解析后的形态
  28. # 假定“当前地图”的ID定义为9000000,“杀怪”的ID为9000001,
  29. # 广寒宫、杀怪ID参考图3
  30. if player.datas[9000000]=200001 and player.datas[9000001]=300001
  31. {
  32. }
复制代码
八、AI、脚本师、策划的工作模型
  1. 1、定义模块变量
  2. 2、编辑模块条件表达式
  3. 3、编辑模块动作表达式
复制代码
无论是AI还是人工(包含程序员),工作更加简单和标准化,但又具有广阔的想象空间来满足策划需求。甚至AI编写脚本也是更加容易的事情。
九、结束语

十、相关链接


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册