[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KGF1PH02J61C67HH8S65XR":3,"skill-same:01M6KGF1PH02J61C67HH8S65XR":61},{"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":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":6,"ownerDescription":46,"updatedAt":47,"install":48,"resources":60},"01M6KGF1PH02J61C67HH8S65XR","wave7-unity-disable-managed-components-guard",null,"Conditionally compile out all managed IComponentData usage when building for platforms or configurations that prohibit managed components (IL2CPP strict, DOTS Runtime, or custom stripped builds).","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\u002Fwave7-unity-disable-managed-components-guard\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"components","guard","unity","managed","wave7 unity disable managed components guard","compile","runtime","usage","true","for","custom","hybrid","2026-11-10 10:12:30",false,"﻿---\nname: wave7-unity-disable-managed-components-guard\ndescription: Conditionally compile out all managed IComponentData usage when building for platforms or configurations that prohibit managed components (IL2CPP strict, DOTS Runtime, or custom stripped builds).\ntags: [hybrid, managed]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# UNITY_DISABLE_MANAGED_COMPONENTS Guard\n\n## Intent\nConditionally compile out all managed IComponentData usage when building for platforms or configurations that prohibit managed components (IL2CPP strict, DOTS Runtime, or custom stripped builds).\n\n## Use When\n- The project must support both managed-component and managed-component-free build targets\n- A platform or build configuration defines UNITY_DISABLE_MANAGED_COMPONENTS\n\n## Avoid When\n- The project targets only the standard Unity player — the guard adds complexity without benefit\n- All builds will always support managed components — unnecessary conditional complexity\n\n## Senior Pattern\n```csharp\n\u002F\u002F Managed component and its system — guarded:\n#if !UNITY_DISABLE_MANAGED_COMPONENTS\n\npublic class RenderDataManaged : IComponentData\n{\n    public Material OverrideMaterial;\n}\n\n[UpdateInGroup(typeof(PresentationSystemGroup))]\npublic partial class ManagedRenderSystem : SystemBase\n{\n    protected override void OnUpdate()\n    {\n        foreach (var data in SystemAPI.Query\u003CRenderDataManaged>())\n        {\n            \u002F\u002F apply override material\n        }\n    }\n}\n\n#endif\n\n\u002F\u002F Blittable fallback — always present in ALL build configurations:\npublic struct RenderDataBlittable : IComponentData\n{\n    public int MaterialIndex;  \u002F\u002F index into a shared material array\n}\n\n\u002F\u002F Systems consuming blittable data — no guard needed:\n[BurstCompile]\npublic partial struct RenderCategoryJob : IJobEntity\n{\n    [BurstCompile]\n    public void Execute(in RenderDataBlittable data, ref RenderTag tag)\n    {\n        tag.MaterialIndex = data.MaterialIndex;\n    }\n}\n```\n\n## Anti-Patterns\n- Leaving managed component code unguarded in a project that enables UNITY_DISABLE_MANAGED_COMPONENTS — compile error at build time, not runtime.\n- Guarding only the component definition but not the systems that use it — partial compile failure; system references undefined type.\n- Using the guard as an excuse to defer designing a blittable alternative — always provide a blittable fallback; the guard is an opt-in overlay, not a design deferral.\n- Nesting guards inconsistently (#if in one file, #endif in another) — C# requires matched pairs per file.\n\n## Runtime Risks\n- If a preprocessor guard is missing on a newly added system that references the managed component, the build fails at compile time — not runtime. Risk is missed guards in new code.\n- Guard absence is not detectable at runtime — enforce via build pipeline (CI build with UNITY_DISABLE_MANAGED_COMPONENTS defined).\n\n## Performance Notes\n- No runtime cost — compile-time only.\n- The blittable fallback struct is the hot-path data model in all configurations.\n- Managed overlay under the guard is the low-frequency presentation layer.\n\n## Architecture Guidance\n- Define blittable struct components as the primary data model — these are the performance-critical ECS data.\n- Use managed components as an opt-in overlay under the guard — presentation\u002Frendering quality features.\n- Document which systems require the guard to be unset in a project-level comment or README.\n- Add a CI build target with UNITY_DISABLE_MANAGED_COMPONENTS defined to catch missing guards early.\n\n## Related Skills\n[[managed-component-bridge]], [[wave7-system-api-managed-api-query]], [[icomponentdata-value-component]], [[world-system-filter]]\n","# UNITY_DISABLE_MANAGED_COMPONENTS Guard\n\n## Intent\nConditionally compile out all managed IComponentData usage when building for platforms or configurations that prohibit managed components (IL2CPP strict, DOTS Runtime, or custom stripped builds).\n\n## Use When\n- The project must support both managed-component and managed-component-free build targets\n- A platform or build configuration defines UNITY_DISABLE_MANAGED_COMPONENTS\n\n## Avoid When\n- The project targets only the standard Unity player — the guard adds complexity without benefit\n- All builds will always support managed components — unnecessary conditional complexity\n\n## Senior Pattern\n```csharp\n\u002F\u002F Managed component and its system — guarded:\n#if !UNITY_DISABLE_MANAGED_COMPONENTS\n\npublic class RenderDataManaged : IComponentData\n{\n    public Material OverrideMaterial;\n}\n\n[UpdateInGroup(typeof(PresentationSystemGroup))]\npublic partial class ManagedRenderSystem : SystemBase\n{\n    protected override void OnUpdate()\n    {\n        foreach (var data in SystemAPI.Query\u003CRenderDataManaged>())\n        {\n            \u002F\u002F apply override material\n        }\n    }\n}\n\n#endif\n\n\u002F\u002F Blittable fallback — always present in ALL build configurations:\npublic struct RenderDataBlittable : IComponentData\n{\n    public int MaterialIndex;  \u002F\u002F index into a shared material array\n}\n\n\u002F\u002F Systems consuming blittable data — no guard needed:\n[BurstCompile]\npublic partial struct RenderCategoryJob : IJobEntity\n{\n    [BurstCompile]\n    public void Execute(in RenderDataBlittable data, ref RenderTag tag)\n    {\n        tag.MaterialIndex = data.MaterialIndex;\n    }\n}\n```\n\n## Anti-Patterns\n- Leaving managed component code unguarded in a project that enables UNITY_DISABLE_MANAGED_COMPONENTS — compile error at build time, not runtime.\n- Guarding only the component definition but not the systems that use it — partial compile failure; system references undefined type.\n- Using the guard as an excuse to defer designing a blittable alternative — always provide a blittable fallback; the guard is an opt-in overlay, not a design deferral.\n- Nesting guards inconsistently (#if in one file, #endif in another) — C# requires matched pairs per file.\n\n## Runtime Risks\n- If a preprocessor guard is missing on a newly added system that references the managed component, the build fails at compile time — not runtime. Risk is missed guards in new code.\n- Guard absence is not detectable at runtime — enforce via build pipeline (CI build with UNITY_DISABLE_MANAGED_COMPONENTS defined).\n\n## Performance Notes\n- No runtime cost — compile-time only.\n- The blittable fallback struct is the hot-path data model in all configurations.\n- Managed overlay under the guard is the low-frequency presentation layer.\n\n## Architecture Guidance\n- Define blittable struct components as the primary data model — these are the performance-critical ECS data.\n- Use managed components as an opt-in overlay under the guard — presentation\u002Frendering quality features.\n- Document which systems require the guard to be unset in a project-level comment or README.\n- Add a CI build target with UNITY_DISABLE_MANAGED_COMPONENTS defined to catch missing guards early.\n\n## Related Skills\n[[managed-component-bridge]], [[wave7-system-api-managed-api-query]], [[icomponentdata-value-component]], [[world-system-filter]]\n",{"name":5,"tags":36,"metadata":37,"description":7},[30,22],{"tier":38,"internal-only":39},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Fwave7-unity-disable-managed-components-guard",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":49,"prompt":59,"zipAvailable":39},[50,53,56],{"tool":51,"command":52},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill wave7-unity-disable-managed-components-guard",{"tool":54,"command":55},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill wave7-unity-disable-managed-components-guard",{"tool":57,"command":58},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill wave7-unity-disable-managed-components-guard","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Fwave7-unity-disable-managed-components-guard\u002FSKILL.md",[],[62,87,108,133,149,170],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":31},"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",[],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],"update","dots update groups","boundary","simulation","how","system","choose","work","use","never","peer","deterministic","how to","coupling","ecs","bugs","frame","value",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":31},"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",[],[94,95,96,19,71,74,97,98,77,99,25,100,101,102,103,104,105,106,29,107],"patterns","transform","dots transform patterns","mount","model","cost","systems","input","with","matrix","socket","at","child","hierarchy",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":119,"publishedAt":31},"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",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[94,120,121,122,123,124,125,74,98,77,126,127,128,25,129,130,102,85,131,132],"singleton","dots singleton patterns","component","config","state","game","writer","time","shared","contract","as","ecb","gating",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":31},"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",[],[140,30,141,142,19,124,71,143,144,76,145,146,77,25,147,21,101,148,28,22],"bridge","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","material",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":31},"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",[],[156,157,83,158,159,19,160,161,162,98,76,163,164,94,165,166,101,167,168,169],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","structural","events","static","request",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":187,"publishedAt":31},"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",[176,181,184],{"categoryNo":177,"categoryName":178,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":182,"categoryName":183,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":185,"categoryName":186,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000023","Skill与智能体开发",[188,189,190,191,192,193,194,195,196,197,198,199,200,201,21,202,28],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete"]