模仿《暖雪》圣物四槽位系统
2026/8/27 12:48:14 网站建设 项目流程

同一个圣物放入不同槽位,会产生不同效果:

  • 核心
  • 力量
  • 敏捷
  • 功效

核心问题:如何让同一个物品根据装备位置,动态切换不同的战斗效果?

1. 先确定完整玩法流程

制作游戏功能,先从“玩家实际会经历什么”出发,再反推需要哪些数据和脚本

先自定义一个简单的游戏流程:

比如

玩家战斗
→ 击杀敌人
→ 敌人随机掉落圣物
→ 玩家靠近并按F
→打开圣物面板并暂停游戏
→ W/S 选择槽位
→Enter装备或交换圣物
→ 玩家属性发生变化
→ ESC 关闭面板继续游戏

2. 需要配置哪些数据

圣物配置RelicConfig

圣物ID
圣物名字
核心槽效果ID
力量槽效果ID
敏捷槽效果ID
功效槽效果ID

圣物效果ID
圣物效果类型
圣物数值
触发概率
触发间隔
触发时机

这些是主要配置的数据,后面有其他需要可以再添加。

圣物配置数据管理类 RelicConfigData.cs

负责加载和提供圣物及其效果的配置信息。
读取Json配置文件

3. 玩家属性RelicPlayerStats

圣物最终一定要影响玩家,所以要准备一个脚本负责:

• 保存玩家基础属性值。
• 保存圣物加成。
• 返回玩家最终属性值。

Player脚本不需要知道具体装备了什么圣物,只需要通过RelicPlayerStats获取玩家数值。

这样战斗和圣物配置不会混在一起。

4. 管理器RelicManager

负责: 管理四个槽位 ,处理战斗效果,计算玩家属性

装备圣物时:

→根据圣物ID找到圣物
→根据选择的槽位找到对应效果ID
→找到具体效果
→保存到对应槽位
→ 重新计算玩家属性

游戏中还有一些战斗效果 比如:燃烧、中毒、冻结、击杀后加属性、受伤后重置等等
也是由RelicManager负责玩家↔RelicManager↔属性 玩家↔RelicManager↔战斗效果

5. 战斗系统

玩家有近战攻击飞剑攻击,敌人分为近战怪远程怪。

这里就先让玩家和敌人共用一套攻击特效脚本Bullet/MeleeAttack,通过判断发射方命中对象来配置数据和发送事件。

战斗脚本只负责说明“发生了什么”,不写具体圣物效果。

比如:

Bullet/MeleeAttack
→ 玩家命中敌人
→ 发送 “玩家攻击命中” 事件
Enemy
→ 敌人死亡
→ 发送 “敌人死亡” 事件
Player
→ 玩家受到伤害
→ 发送 “玩家受伤” 事件

6. 地面掉落的圣物

地面掉落的圣物应该有一个脚本 RelicGround

敌人死亡后:

从圣物配置中随机选择一个
→创建Relics预设体
→ 给 RelicGround 设置圣物ID

主要负责:

• 检测圣物与玩家的距离。
• 玩家走近后,显示交互按钮 。
• 检测交互按键,比如F键。
• 打开圣物面板。
• 被装备后销毁。

7. 圣物面板 RelicsPanel

主要:

• 记录当前选择的槽位。
• 记录地面掉落的圣物对象以及ID。

操作:

W/S
修改当前选择的槽位索引

Enter
交换当前选中槽位和新槽位

槽位原来为空:装备新圣物→销毁地面圣物

槽位原来有圣物:新圣物进入槽位→旧圣物变成地面圣物

ESC
隐藏面板,恢复 Time.timeScale

8. 初始化脚本RelicGameInit

场景启动脚本,负责把场景中的对象连接起来

获取圣物配置
获取玩家属性
获取圣物管理器
添加玩家和敌人脚本
传入必要引用
游戏场景HUD,监听属性变化
刷新显示

自制类图:

理清关键步骤,就可以开始了:

1. 配置数据

简单配置几个圣物和对应效果:

一.定义圣物数据格式

RelicEnums.cs

RelicConfig.cs定义 JSON 配置读取后保存成什么样的对象


RelicConfigData.cs 从 StreamingAssets 读取圣物 JSON

JsonMgr封装了序列化反序列化的方法

二、玩家属性RelicPlayerStats.cs

提供修改属性和获取属性等方法

三、圣物管理器RelicManager.cs

装备圣物、卸下圣物、获取圣物\效果配置、刷新\添加\重置属性 等方法

项目中引入了一些通用基础框架,提供了一些封装好的方法。

比如事件中心模块EventCenter.cs, 里面提供了一些注册事件和监听事件的方法。

四.战斗相关

CombatDefine.cs 战斗工具脚本

主要用于 区分玩家或敌人攻击、提供伤害接口,后续可拓展,如场景道具、训练假人等受伤对象

MeleeAttack.cs Bullet.cs

PlayerEnemy只负责创建攻击,实际检测谁被打中由攻击预设体负责。

Player.cs 物理移动,左键攻击,右键飞剑,受伤触发事件

Enemy.cs 同一个脚本处理两种敌人

RelicGround.cs 挂在掉落的Relics预设体上。 玩家靠近创建交互ui预设体

RelicsPanel.cs 圣物面板的输入、显示和交换。

RelicGameInit.cs 统一初始化

Demo演示:

暖雪 圣物系统demo演示-CSDN直播

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询