[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KG8NTQ15W3KXATE7WWVB67":3,"skill-same:01M6KG8NTQ15W3KXATE7WWVB67":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":63},"01M6KG8NTQ15W3KXATE7WWVB67","transform-usage-flags",null,"Declare exactly which transform components an entity needs at bake time, preventing spurious LocalTransform\u002FLocalToWorld components on data-only entities and missing transforms on moving entities.","dyCuong03\u002Funity-agent-team","dyCuong03","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F137050365?v=4","01M6KFXC85HQHXZJC2VC1KY6EZ","CuongND","01M6KFXCCHP6CD5MTA8NECJC36",8,"MIT","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Ftransform-usage-flags\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"flags","transform","usage","transform usage flags","components","data","only","time","missing","transforms","true","which","at","entity","baking","2026-11-10 10:12:30",false,"﻿---\nname: transform-usage-flags\ndescription: Declare exactly which transform components an entity needs at bake time, preventing spurious LocalTransform\u002FLocalToWorld components on data-only entities and missing transforms on moving entities.\ntags: [baking, transforms]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# TransformUsageFlags\n\n## Intent\nDeclare exactly which transform components an entity needs at bake time, preventing spurious LocalTransform\u002FLocalToWorld components on data-only entities and missing transforms on moving entities.\n\n## Use When\nEvery call to GetEntity() and CreateAdditionalEntity() in a Baker. The flag must match the entity's actual runtime behavior.\n\n## Avoid When\nThere is no \"avoid when\" — TransformUsageFlags must always be specified explicitly. Never guess; derive the flag from how the entity will be used at runtime.\n\n## Senior Pattern\n- `TransformUsageFlags.None` — data-only entities (config, singletons, tags, staging entities). No LocalTransform added.\n- `TransformUsageFlags.Dynamic` — entities that move at runtime. Adds LocalTransform + LocalToWorld.\n- `TransformUsageFlags.Renderable` — entities rendered but not moved by ECS systems (static mesh renderers). Adds LocalToWorld only.\n- `TransformUsageFlags.ManualOverride` — Baker takes full responsibility for adding transform components. Used when batch-adding many components via ComponentTypeSet to minimize archetype migrations.\n- For prefab entity references: `GetEntity(authoring.PrefabField, TransformUsageFlags.Dynamic)`.\n\n## Code Template\n```csharp\nclass Baker : Baker\u003CEnemyAuthoring>\n{\n    public override void Bake(EnemyAuthoring authoring)\n    {\n        \u002F\u002F Moving enemy — needs LocalTransform\n        var entity = GetEntity(TransformUsageFlags.Dynamic);\n        AddComponent(entity, new EnemyData { Speed = authoring.Speed });\n\n        \u002F\u002F Config singleton — no transform needed\n        var configEntity = CreateAdditionalEntity(TransformUsageFlags.None);\n        AddComponent(configEntity, new EnemyConfig { MaxCount = authoring.MaxCount });\n\n        \u002F\u002F Batch add via ManualOverride — single structural change\n        var tileEntity = CreateAdditionalEntity(TransformUsageFlags.ManualOverride);\n        AddComponent(tileEntity, new ComponentTypeSet(\n            ComponentType.ReadWrite\u003CLocalTransform>(),\n            ComponentType.ReadWrite\u003CLocalToWorld>(),\n            ComponentType.ReadWrite\u003CTileData>()\n        ));\n        SetComponent(tileEntity, LocalTransform.FromPosition(authoring.TileOffset));\n    }\n}\n```\n\n## Anti-Patterns\n- Using `TransformUsageFlags.Dynamic` on a static\u002Fdata-only entity — wastes chunk space, triggers unnecessary TransformSystemGroup processing every frame.\n- Using `TransformUsageFlags.None` on an entity that moves — LocalTransform is absent at runtime, transform system skips it, entity never moves.\n- Using `TransformUsageFlags.ManualOverride` and forgetting to AddComponent the transform manually — silently broken transforms, no compile or runtime error until movement is attempted.\n\n## Runtime Risks\n- Wrong flag = wrong archetype = wrong system behavior. Static entities with Dynamic flag waste memory and CPU. Moving entities with None flag are invisible to the transform system.\n\n## Performance Notes\n- None = smallest archetype footprint. Prefer for all config\u002Fsingleton entities.\n- ManualOverride + ComponentTypeSet batch add = single structural change for all components, minimum archetype migrations during baking.\n\n## Architecture Guidance\nMatch the flag to how the runtime system will use the entity. If unsure, check which systems query for LocalTransform — if your entity needs to be in those queries, use Dynamic.\n\n## Related Skills\n[[baker-authoring-conversion]]\n","# TransformUsageFlags\n\n## Intent\nDeclare exactly which transform components an entity needs at bake time, preventing spurious LocalTransform\u002FLocalToWorld components on data-only entities and missing transforms on moving entities.\n\n## Use When\nEvery call to GetEntity() and CreateAdditionalEntity() in a Baker. The flag must match the entity's actual runtime behavior.\n\n## Avoid When\nThere is no \"avoid when\" — TransformUsageFlags must always be specified explicitly. Never guess; derive the flag from how the entity will be used at runtime.\n\n## Senior Pattern\n- `TransformUsageFlags.None` — data-only entities (config, singletons, tags, staging entities). No LocalTransform added.\n- `TransformUsageFlags.Dynamic` — entities that move at runtime. Adds LocalTransform + LocalToWorld.\n- `TransformUsageFlags.Renderable` — entities rendered but not moved by ECS systems (static mesh renderers). Adds LocalToWorld only.\n- `TransformUsageFlags.ManualOverride` — Baker takes full responsibility for adding transform components. Used when batch-adding many components via ComponentTypeSet to minimize archetype migrations.\n- For prefab entity references: `GetEntity(authoring.PrefabField, TransformUsageFlags.Dynamic)`.\n\n## Code Template\n```csharp\nclass Baker : Baker\u003CEnemyAuthoring>\n{\n    public override void Bake(EnemyAuthoring authoring)\n    {\n        \u002F\u002F Moving enemy — needs LocalTransform\n        var entity = GetEntity(TransformUsageFlags.Dynamic);\n        AddComponent(entity, new EnemyData { Speed = authoring.Speed });\n\n        \u002F\u002F Config singleton — no transform needed\n        var configEntity = CreateAdditionalEntity(TransformUsageFlags.None);\n        AddComponent(configEntity, new EnemyConfig { MaxCount = authoring.MaxCount });\n\n        \u002F\u002F Batch add via ManualOverride — single structural change\n        var tileEntity = CreateAdditionalEntity(TransformUsageFlags.ManualOverride);\n        AddComponent(tileEntity, new ComponentTypeSet(\n            ComponentType.ReadWrite\u003CLocalTransform>(),\n            ComponentType.ReadWrite\u003CLocalToWorld>(),\n            ComponentType.ReadWrite\u003CTileData>()\n        ));\n        SetComponent(tileEntity, LocalTransform.FromPosition(authoring.TileOffset));\n    }\n}\n```\n\n## Anti-Patterns\n- Using `TransformUsageFlags.Dynamic` on a static\u002Fdata-only entity — wastes chunk space, triggers unnecessary TransformSystemGroup processing every frame.\n- Using `TransformUsageFlags.None` on an entity that moves — LocalTransform is absent at runtime, transform system skips it, entity never moves.\n- Using `TransformUsageFlags.ManualOverride` and forgetting to AddComponent the transform manually — silently broken transforms, no compile or runtime error until movement is attempted.\n\n## Runtime Risks\n- Wrong flag = wrong archetype = wrong system behavior. Static entities with Dynamic flag waste memory and CPU. Moving entities with None flag are invisible to the transform system.\n\n## Performance Notes\n- None = smallest archetype footprint. Prefer for all config\u002Fsingleton entities.\n- ManualOverride + ComponentTypeSet batch add = single structural change for all components, minimum archetype migrations during baking.\n\n## Architecture Guidance\nMatch the flag to how the runtime system will use the entity. If unsure, check which systems query for LocalTransform — if your entity needs to be in those queries, use Dynamic.\n\n## Related Skills\n[[baker-authoring-conversion]]\n",{"name":5,"tags":39,"metadata":40,"description":7},[33,28],{"tier":41,"internal-only":42},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Ftransform-usage-flags",0,"https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team","https:\u002F\u002Fgithub.com\u002FdyCuong03","Game developer","2026-07-25 22:22:25",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":42},[53,56,59],{"tool":54,"command":55},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill transform-usage-flags",{"tool":57,"command":58},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill transform-usage-flags",{"tool":60,"command":61},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill transform-usage-flags","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Ftransform-usage-flags\u002FSKILL.md",[],[65,90,111,135,155,176],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":34},"01M6KH55FFS00ET877QSMRYGX4","dots-update-groups","How to choose the right ECS system group and ordering so per-frame and per-fixed-step work is deterministic and never races its own readers. Covers InitializationSystemGroup \u002F SimulationSystemGroup \u002F PresentationSystemGroup \u002F FixedStepSimulationSystemGroup \u002F VariableRateSimulationSystemGroup, UpdateBefore \u002F UpdateAfter peer ordering, OrderFirst \u002F OrderLast group-boundary placement, RateManager, and the cross-group ordering trap. Use when adding an ISystem, fixing \"value visible one frame late\" bugs, or coupling simulation to a fixed timestep.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-update-groups\u002FSKILL.md",[],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89],"update","dots update groups","boundary","simulation","how","system","choose","work","use","never","peer","deterministic","how to","coupling","ecs","bugs","frame","value",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":34},"01M6KH50PWYEFQDCGYBZ0326F1","dots-transform-patterns","The Entities 1.x transform model — LocalTransform (writable input) vs LocalToWorld (system-owned matrix), Parent\u002FChild hierarchy, reparenting cost, uniform vs non-uniform scale (PostTransformMatrix), and when to opt out with custom transform systems. Use when designing parent\u002Fchild hierarchies, runtime reparenting (mount\u002Fdismount\u002Fsocket), or choosing transform components at the Baker boundary.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-transform-patterns\u002FSKILL.md",[],[97,20,98,23,74,77,99,100,80,101,102,103,104,105,106,107,31,108,109,110],"patterns","dots transform patterns","mount","model","cost","runtime","systems","input","with","matrix","socket","child","custom","hierarchy",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":122,"publishedAt":34},"01M6KH4VW4MA14DQW4KQYPFT0S","dots-singleton-patterns","Model cross-system shared configuration and game state as a single-entity component with a strict single-writer contract. Covers RequireForUpdate gating, SystemAPI.GetSingleton \u002F GetSingletonRW \u002F HasSingleton \u002F TryGetSingleton, bake-time vs runtime-created vs ECB-system singletons, the \"exactly one entity\" runtime invariant, and the single-writer rule. Use when designing frame-stable global config, shared mutable state, or any component intended to exist on exactly one entity.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-singleton-patterns\u002FSKILL.md",[117],{"categoryNo":118,"categoryName":119,"taxonomyType":120,"taxonomyTypeDesc":121},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[97,123,124,125,126,127,128,77,100,80,129,26,130,102,131,132,105,88,133,134],"singleton","dots singleton patterns","component","config","state","game","writer","shared","contract","as","ecb","gating",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":34},"01M6KH4PR076AYNDZHD63HHWX6","dots-hybrid-bridge","The one-way bridge between DOTS-owned runtime state and Unity-owned presentation. Covers UnityObjectRef for managed asset refs in components, the DOTS-writes \u002F Unity-reads ownership rule, when to use managed IComponentData vs UnityObjectRef vs CompanionComponent, baker-bridge vs runtime-bridge, and SubScene boundary rules. Use when an entity must reference Unity assets (Mesh, Material, AudioClip, ScriptableObject), a MonoBehaviour view must read entity state, or input\u002FUI must trigger ECS work.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-hybrid-bridge\u002FSKILL.md",[],[142,143,144,145,23,127,74,146,147,79,148,149,80,102,150,151,104,152,153,154],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","unity","material","for","managed",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":34},"01M6KH4FGRQ9AP2ND5H5HX4D83","dots-event-driven-ecs","Model one-frame events and external requests in ECS without dual ownership, polling, or persistent state leaks. Covers request-tag pattern with ECB, enableable command components (no structural change), event buffers (IBufferElementData), explicit consumer ownership, one-frame latency rules, and the banned C# event \u002F UnityEvent \u002F static bus anti-patterns. Use when input\u002FUI\u002Fnetwork must trigger ECS work, when a one-frame signal fans out to N consumers (damage, hit, collision), or when state changes must be processed exactly once.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-event-driven-ecs\u002FSKILL.md",[],[162,163,86,164,165,23,166,167,168,100,79,169,170,97,171,172,104,173,174,175],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","structural","events","static","request",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":193,"publishedAt":34},"01M6KH4BWRGCEBJ8PKCKCSGT33","valid_skill","A complete, well-formed test fixture skill for SkillHub validation testing. Covers basic task routing and code review for Unity projects.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalid_skill\u002FSKILL.md",[182,187,190],{"categoryNo":183,"categoryName":184,"taxonomyType":185,"taxonomyTypeDesc":186},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":188,"categoryName":189,"taxonomyType":185,"taxonomyTypeDesc":186},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":191,"categoryName":192,"taxonomyType":185,"taxonomyTypeDesc":186},"01JBSEEDCAT000000000000023","Skill与智能体开发",[194,195,196,197,198,199,200,201,202,203,204,205,206,207,151,208,153],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete"]