besty0728/unity-scriptdesign
Advises on Unity gameplay script quality — code review, reducing coupling, improving maintainability, and refactoring. Use when reviewing code quality, untangling tightly-coupled scripts, or planning a refactor for maintainability, even if the user just says "看看我代码" or "代码有点乱". 为 Unity 游戏脚本质量提供建议(代码审查、降低耦合、提升可维护性、重构);当用户要审查代码质量、理顺高耦合脚本、或为可维护性规划重构时使用。
npx skills add https://github.com/Besty0728/Unity-Skills --skill unity-scriptdesign
Use this skill before creating gameplay scripts, or after scripts are generated and need a design pass.
MonoBehaviour, ScriptableObject, or plain C# class?Update, repeated Find, avoidable allocation, or reflection in hot paths?The Review Checklist above asks "where does this *class* live". Ask the same question for every *field*. Every piece of state has one of three lifecycles, and putting a field on the wrong one is the most common cause of "why did this break when the designer tweaked a value" and "why are my unit tests flaky".
| Lifecycle | When the value is decided | Where it belongs | Typical idiom |
|-----------|--------------------------|------------------|---------------|
| Authoring-time | By a designer in the Editor, before Play | ScriptableObject asset, or [SerializeField] private on a prefab | Immutable at runtime; read via _config.Speed |
| Composition-time | Once per scene/instance, at Awake/Start | private field, assigned from GetComponent / GetComponentInChildren / ctor arg | Cached reference, no per-frame lookup |
| Runtime-mutable | Every frame or on gameplay events | private backing field + public read-only property + event | Exposed via public float Health { get; private set; } + OnHealthChanged |
Transform → Composition-time if set once at spawn, Runtime-mutable if re-targeted each frame.public float hp;.Rigidbody/Animator on the same GameObject → Composition-time, cached in Awake.Mixing the three lifecycles is what turns a clean class into a god object. A MonoBehaviour whose public float speed is edited by both the Inspector and a power-up script has two owners and no invariant; a bug in either path corrupts the other. The ECS baking pipeline makes this distinction a hard architectural boundary (Authoring → Baker → System), and the discipline transfers directly: if you would not mix an Authoring component with runtime write-back in ECS, do not mix them in a MonoBehaviour either. *Source: EntitiesSamples/Docs/baking.md:5-16.*
> Mode: Documentation only — no REST skills to gate; load freely under any operating mode (Approval / Auto / Bypass).
Take besty0728/unity-scriptdesign from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.