chore: add asset-standards instructions for auto-enforcement

Auto-attaches to all Assets/_Game/** file operations.
Contains: prefix table, directory rules, Addressables group/label
mapping, required editor tools, and hard rules.
References full specs in Docs/Standards/ for detail.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-05-20 13:38:27 +08:00
parent b5c852f5e4
commit 84528403ec

View File

@@ -0,0 +1,126 @@
---
description: "Use when creating, moving, renaming, or placing any Unity game assets, ScriptableObjects, Prefabs, scenes, art, audio, or scripts under Assets/_Game/. Also use when writing Addressables group/label assignments or AddressKeys.cs constants. Enforces Docs/Standards/AssetFolderSpec.md and Docs/Standards/AddressablesLabelSpec.md."
applyTo: "Assets/_Game/**"
---
# Asset Standards Enforcement
Full specifications:
- Naming, directories, Addressables: `Docs/Standards/AssetFolderSpec.md`
- Addressable labels & groups: `Docs/Standards/AddressablesLabelSpec.md`
When in doubt, **READ THE SPEC FILE** before deciding a path or name.
---
## Asset Naming Prefix Table
| Prefix | System | Example |
|--------|--------|---------|
| `PLY_` | Player | `PLY_Player.prefab`, `PLY_Player01.mat` |
| `ENM_` | Enemy | `ENM_GruntWarrior.prefab`, `ENM_E001_Stats.asset` |
| `WPN_` | Weapon | `WPN_SkyBlade.prefab`, `WPN_SkyBlade_Data.asset` |
| `SKL_` | Skill | `SKL_DashSlash_Data.asset` |
| `SPL_` | Spell | `SPL_Fireball.asset` |
| `CHM_` | Charm | `CHM_IronSkin.asset` |
| `PROJ_` | Projectile | `PROJ_Arrow.prefab` |
| `VFX_` | VFX | `VFX_HitSpark.prefab` |
| `COL_` | Collectible | `COL_HPOrb.prefab` |
| `UI_` | UI Prefab | `UI_HUD.prefab` |
| `SYS_` | Persistent Manager | `SYS_GameManager.prefab` |
| `ENV_` | Environment Structure | `ENV_Tilemap_Ground.prefab` |
| `WLD_` | World Object | `WLD_Chest.prefab` |
| `EVT_` | Event Channel SO | `EVT_PlayerDied.asset` |
| `CMB_` | Combat SO | `CMB_DamageSource_Sword.asset` |
| `MAP_` | Map data | `MAP_RoomData_Forest_01.asset` |
| `AUD_BGM_` | BGM audio | `AUD_BGM_Forest.asset` |
| `AUD_SFX_` | SFX audio | `AUD_SFX_HitImpact.asset` |
| `ABL_` | Ability | `ABL_DoubleJump.asset` |
| `SET_` | Settings | `SET_GlobalSettings.asset` |
---
## Key Directory Rules
| Asset Type | Must Go In |
|-----------|-----------|
| Sprite / Texture | `_Game/Art/Characters/…`, `_Game/Art/Effects/…`, `_Game/Art/UI/…` |
| AnimationClip / Controller | Same `…/{ID}/Animations/` folder as sprites |
| Material `.mat` | Same `…/{ID}/Materials/` folder as sprites |
| Sprite Atlas | `…/{ID}/Atlases/` subfolder beside its sprites |
| ScriptableObject `.asset` | `_Game/Data/{module}/` (never inside `Prefabs/` or `Art/`) |
| Event Channel SO | `_Game/Data/Events/{module}/` |
| Prefab (player/enemy/vfx/etc.) | `_Game/Prefabs/{category}/` |
| Scene | `_Game/Scenes/` (test scenes → `Scenes/Testings/`) |
| Shader Graph | `_Game/Shaders/BaseASE/{category}/` |
| HLSL include | `_Game/Shaders/Includes/` |
| UXML / USS | `_Game/UI Toolkit/Layouts/` or `Styles/` |
| Skill SO | `_Game/Data/Progression/Skills/` |
| Weapon SO | `_Game/Data/Combat/Weapons/` |
| Charm SO | `_Game/Data/Progression/Charms/` |
| Config SO (dynamic) | `_Game/Data/Settings/` or `_Game/Data/{module}/` |
---
## Addressables Group Assignment
| Address Prefix | Group |
|---------------|-------|
| `Scene_` | `Scenes` |
| `PLY_`, `WPN_` | `Player` |
| `ENM_` | `Enemies` |
| `PROJ_` | `Projectiles` |
| `VFX_` | `VFX_Common` |
| `UI_` | `UI` |
| `COL_` | `Collectibles` |
| `CHM_`, `Config/` | `Config` |
| `AUD_` | `Audio_Music` |
| `Room_{Region}_*` | `Room_{Region}` (dynamic) |
| `Boss_{Name}` | `Boss_{Name}` (dynamic) |
## Addressables Label Assignment
| Address Prefix | Labels |
|---------------|--------|
| `PLY_` | `Preload` |
| `WPN_` | `Weapon`, `Preload` |
| `ENM_` | `Enemy` |
| `PROJ_` | `Poolable`, `Preload` |
| `VFX_` | `Poolable`, `Preload` |
| `COL_` | `Poolable`, `Preload` |
| `CHM_` | `Charms` |
| `Config/` | `Config` |
| `AUD_BGM_` | `BGM` |
| `AUD_SFX_` | `SFX` |
| `Scene_MainMenu` | `Preload` (exact override) |
| `UI_FloatingDamageText` | `Poolable`, `Preload` (exact override) |
---
## Required: Use Editor Tools
Never create assets manually in Project window. Always use the editor tools:
| Asset to Create | Tool | Menu Path |
|----------------|------|-----------|
| Enemy SO | Enemy Data Manager | `BaseGames/Data/Enemy Data Manager` |
| Weapon SO | Weapon Editor | `BaseGames/Data/Weapon Editor` |
| Weapon HitBox Prefab | Weapon HitBox Wizard | `BaseGames/Create/Weapon HitBox Prefab` |
| Skill SO | Skill Editor | `BaseGames/Data/Skill Editor` |
| Skill HitBox Prefab | Skill HitBox Wizard | `BaseGames/Create/Skill HitBox Prefab` |
| Player Form SO | Character Wizard | `BaseGames/Data/Character Wizard` |
| Boss skill data | Boss Skill Sequence | `BaseGames/Data/Boss Skill Sequence` |
| Addressables group/label sync | Rule Sync | `BaseGames/Addressables/Rule Sync` |
| Addressables batch register | Addressable Batch Tool | `BaseGames/Addressables/Addressable Batch Tool` |
| Validate address keys | Validate Address Keys | `BaseGames/Addressables/Validate Address Keys` |
---
## Hard Rules
- All `Address` constants → `AddressKeys.cs`. Never hardcode strings in code.
- All asset loading → `AssetLoader.LoadAsync<T>(AddressKeys.Xxx)`. Never call `Addressables.LoadAssetAsync` or `Resources.Load` directly.
- `EVT_*.asset` event channels are **never** registered as Addressables (use Inspector references).
- Sub-Prefabs (HitBox, HurtBox, bones) are **never** registered as Addressables.
- Test scenes in `Scenes/Testings/` are **never** registered as Addressables.
- All first-party assets must be under `Assets/_Game/`. Never place custom assets in third-party plugin folders.