【unity实战】Unity游戏开发:如何用ScriptableObject与序列化多态实现可复用的模块化效果系统?
文章目录
- 前言
- 方案一:ScriptableObject实现
-
- 1、创建效果基类
- 2、实现具体效果
- 3、卡牌数据配置
- 4、卡牌执行逻辑
- 5、创建不同的效果数据和卡牌数据
- 6、创建卡牌1和卡牌2实例
- 7、效果
- 方案二:序列化多态实现
-
- 1、效果基类
- 2、具体效果实现
- 3、卡牌数据配置
- 4、卡牌执行逻辑
- 5、创建不同的卡牌数据
- 6、创建卡牌1和卡牌2实例
- 7、运行效果
- 方案选型建议
- 专栏推荐
- 完结
前言
在游戏开发中,我们经常需要实现一个对象触发多种不同效果的功能。以卡牌游戏为例:
-
卡牌1使用后抽1张卡
-
卡牌2使用后抽1张卡并造成5点伤害
-
卡牌3使用后造成1点伤害
如果把这些效果都硬编码在卡牌脚本里,会导致以下问题:
-
代码重复 - 相同效果需要在多个卡牌中重复编写
-
难以维护 - 修改效果需要查找所有相关卡牌
-
扩展困难 - 新增效果类型需要修改核心代码
本文将介绍两种模块化设计方案,通过将效果与卡牌解耦,实现更灵活、可维护的系统。
方案一:ScriptableObject实现
核心思路:使用ScriptableObject(SO)为每种效果创建独立的数据资产,卡牌通过组合这些资产实现不同效果。如果你已经有一定的开发经验,对这种方式一定不陌生。
1、创建效果基类
using UnityEngine