关于 unity-composition-pattern
unity-composition-pattern 是一种 Unity 设计技能,通过组合 ScriptableObject 配置来定义实体,避免复杂的继承层级。它适合需要用较少专用类管理可替换实体数据与行为的开发者。
主要功能
- 01Has-a 组合模型
- 02ScriptableObject 转运行时实例
- 03基于 Tuple 返回多个值
- 04减少专用 C# 文件
适用场景
- 01用配置资源表示实体变体
- 02从 ScriptableObject 模板创建运行时实体
- 03从组合行为返回多个值
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ muharremtozan/ unity-agent-skills --skill unity-composition-pattern安装后在 Claude Code 中输入/unity-composition-pattern确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/code/CompositionExample.cs.txtEntityConfigSO.cs.txtModularEntity.cs.txt详细介绍
Unity 组合模式
一种用于避免“继承地狱”的基础设计技巧。此模式用一个通用类替代 10 个特定类(例如 RedStone、GoldStone),并通过 ScriptableObject 资源组合行为。
核心功能
- 拥有(Has-A)逻辑:对象通过成员(配置)定义属性,而非通过基类类型定义。
- SO 到运行时桥接:使用 ScriptableObject 作为静态数据模板,生成动态运行时实例。
- 元组解构:使用 C# ValueTuples 从组合对象返回多部分数据,无需额外样板代码。
- 层级扁平化:将差异转移到项目资源中,大幅减少所需的 C# 文件数量。
核心文件(最多 3 个)
EntityConfigSO.cs.txt:用于创建可互换数据包的基类。ModularEntity.cs.txt:用于容纳一个或多个配置的通用容器。CompositionExample.cs.txt:通过元组解构演示资源采集。
用法
1. 区分“是(Is-A)”与“拥有(Has-A)”
- 不佳:
ElectricCar : Car : Vehicle(继承) - 良好:
Vehicle拥有一个EngineConfig(组合)
2. 多值返回(元组)
不使用内部状态跟踪:
public (int gold, int weight) Gather() => (10, 5);
// Client destructures instantly:
var (g, w) = node.Gather();
3. 通过 SO 实现策略
将不同的 EntityConfigSO 资源附加到同一个 ModularEntity,即可在 Inspector 中更改其身份。
评论
支持 Markdown