Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use when adding, importing, moving or loading textures, models, audio or scenes - per-platform compression, atlases, LODs, async loading per engine, engine metadata files (.meta, .import, .uid, .uasset), Git LFS, and asset validation tests.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Assets are most of a game's size, most of its load time and most of its memory. They also come with engine metadata that silently breaks references when it is lost: a Unity .meta regenerated with a new GUID unhooks every prefab that used the asset. Treat assets like code — reviewed import settings, committed metadata, validated by tests.
Core principle: Compressed for the target platform, loaded asynchronously, committed with its metadata, and never moved outside the engine that owns its references.
| Engine | Files | Rule |
|---|---|---|
| Unity | <asset>.meta (GUID + import settings) beside every asset and folder | Commit with the asset; move/rename inside the Editor or move the .meta with it; never delete and regenerate |
| Godot 4 | <asset>.import beside imported assets; .uid beside scripts and shaders (4.4+); .godot/ cache | Commit .import and .uid; ignore .godot/ |
| Unreal | .uasset / .umap (binary, references by path) | Move/rename only in the Editor, then "Fix Up Redirectors"; lock binaries (LFS lockable) |
| Web / Bevy | none | Paths are code — update every reference in the same change |
Moving a file with mv in a Unity or Unreal project without its metadata (or outside the editor) is a broken-reference bug even if the build is green.
.gitattributes first; follow the patterns it already has. Typical: *.png *.psd *.fbx *.glb *.wav *.ogg *.uasset *.umap filter=lfs diff=lfs merge=lfs -text, with lockable for Unreal binaries..fbx committed as a regular blob.git lfs ls-files shows what is tracked; if git lfs is not installed here, say so instead of committing pointers by hand.| Target | Format |
|---|---|
| Desktop / console | BC7 (colour), BC5 (normal maps), BC4 (single channel) |
| Modern mobile | ASTC (block size by quality: 4×4 UI, 6×6–8×8 world) |
| Android fallback | ETC2 |
| Web | KTX2 / Basis Universal (transcoded per GPU at load), WebP/AVIF for UI and 2D |
TC_Default, TC_Normalmap, TC_Masks), LOD bias per platform.KTX2Loader / Babylon's KTX2 support; packed atlases (TexturePacker JSON) for Phaser/PixiJS.LODGroup, Godot automatic mesh LOD on import, Unreal Nanite for static meshes where the platform supports it and classic LODs elsewhere (skeletal meshes, mobile).npx @gltf-transform/cli optimize in.glb out.glb is a quick win; check the repository's pipeline first..ogg for music, .wav for short SFX; web: a format every target browser decodes, and an audio-unlock on the first user gesture.// ❌ synchronous load mid-gameplay: a visible hitch, and Resources/ ships everything
var prefab = Resources.Load<GameObject>("Enemies/Boss");
// ✅ async, released when done (Addressables)
var handle = Addressables.LoadAssetAsync<GameObject>("enemies/boss");
var prefab = await handle.Task;
// ... later, when the level unloads:
Addressables.Release(handle);
# Godot: threaded load at a loading screen or ahead of need
ResourceLoader.load_threaded_request(LEVEL_PATH)
# poll in _process:
if ResourceLoader.load_threaded_get_status(LEVEL_PATH) == ResourceLoader.THREAD_LOAD_LOADED:
var scene: PackedScene = ResourceLoader.load_threaded_get(LEVEL_PATH)
TSoftObjectPtr, TSoftClassPtr) with UAssetManager / FStreamableManager::RequestAsyncLoad; avoid hard references in Blueprints that pull whole asset graphs into memory.Assets.loadBundle, three.js LoadingManager; code-split per level.AssetServer::load returns a handle immediately; gate the state change on the load state (or the repository's loading plugin).An import-settings test fails the build when someone drops in an uncompressed 4K texture:
[Test] public void WorldTextures_AreCompressedAndCapped() {
foreach (var guid in AssetDatabase.FindAssets("t:Texture2D", new[] { "Assets/_Project/Art/World" })) {
var path = AssetDatabase.GUIDToAssetPath(guid);
var importer = (TextureImporter)AssetImporter.GetAtPath(path);
Assert.That(importer.maxTextureSize, Is.LessThanOrEqualTo(2048), path);
Assert.That(importer.textureCompression, Is.Not.EqualTo(TextureImporterCompression.Uncompressed), path);
}
}
The same idea elsewhere: a Godot test reading .import files under res://art/world, a Node script checking public/ sizes and formats, a data-validation rule in Unreal.
mv and losing .meta GUIDs or Unreal references..godot/ cache or Unreal's Intermediate/, Saved/, DerivedDataCache/, Binaries/.Resources.Load / synchronous load() during gameplay..gitattributes LFS patterns the repo uses..meta / .import, or a .meta with a changed GUID.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases
日本語の概要は準備中です。原文の説明を表示しています。
Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping
日本語の概要は準備中です。原文の説明を表示しています。
Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal
日本語の概要は準備中です。原文の説明を表示しています。
Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task
日本語の概要は準備中です。原文の説明を表示しています。
How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.
日本語の概要は準備中です。原文の説明を表示しています。
Use when deciding whether a request needs an analiz task before implementation - the conditions that require the architect's analysis versus going straight to implementation
日本語の概要は準備中です。原文の説明を表示しています。