[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KG76HNZJVJMQGD9R4ENASV":3,"skill-same:01M6KG76HNZJVJMQGD9R4ENASV":59},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":44,"updatedAt":45,"install":46,"resources":58},"01M6KG76HNZJVJMQGD9R4ENASV","multi-entity-baker",null,"Create multiple runtime entities from a single authoring GameObject using CreateAdditionalEntity, with BakingOnlyEntity marking staging entities that should not appear in the runtime world.","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\u002Fmulti-entity-baker\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"multi","entity","multi entity baker","create","world","runtime","authoring","with","true","baking","2026-11-10 10:12:30",false,"﻿---\nname: multi-entity-baker\ndescription: Create multiple runtime entities from a single authoring GameObject using CreateAdditionalEntity, with BakingOnlyEntity marking staging entities that should not appear in the runtime world.\ntags: [baking]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# Multi-Entity Baker\n\n## Intent\nCreate multiple runtime entities from a single authoring GameObject using CreateAdditionalEntity, with BakingOnlyEntity marking staging entities that should not appear in the runtime world.\n\n## Use When\nOne authoring GO conceptually represents N runtime entities (procedural tiles, image-to-entity conversion, mesh-to-particle conversion, grid spawning). The N is known at bake time from authoring data.\n\n## Avoid When\nThe count is not known at bake time (runtime-spawned entities) — use EntityCommandBuffer at runtime instead. Avoid when the additional entities are purely internal staging entities that a baking system will process — use [BakingType] buffer + baking system instead.\n\n## Senior Pattern\n- Call `CreateAdditionalEntity(TransformUsageFlags.X)` inside the Baker to create each additional entity.\n- Use `AddBuffer\u003CT>(mainEntity)` to pass the list of additional entities to a baking system via a [BakingType] buffer.\n- Use `AddComponent(entity, new ComponentTypeSet(...))` to batch-add all components in one structural change.\n- Call `AddComponent\u003CBakingOnlyEntity>(stagingEntity)` on any entity that exists only to carry data to a baking system and should not appear in the runtime world.\n- SetComponent after AddComponent to initialise transform and data.\n\n## Code Template\n```csharp\n[BakingType]\npublic struct TileEntityRef : IBufferElementData\n{\n    public Entity Value;\n}\n\nclass Baker : Baker\u003CTileGridAuthoring>\n{\n    public override void Bake(TileGridAuthoring authoring)\n    {\n        var mainEntity = GetEntity(TransformUsageFlags.None);\n\n        \u002F\u002F main entity is only a staging container\n        AddComponent\u003CBakingOnlyEntity>(mainEntity);\n\n        var tileRefs = AddBuffer\u003CTileEntityRef>(mainEntity);\n\n        for (int y = 0; y \u003C authoring.Height; y++)\n        for (int x = 0; x \u003C authoring.Width; x++)\n        {\n            var tile = CreateAdditionalEntity(TransformUsageFlags.ManualOverride);\n\n            \u002F\u002F Single structural change for all components\n            AddComponent(tile, new ComponentTypeSet(\n                ComponentType.ReadWrite\u003CLocalTransform>(),\n                ComponentType.ReadWrite\u003CLocalToWorld>(),\n                ComponentType.ReadWrite\u003CTileData>()\n            ));\n            SetComponent(tile, LocalTransform.FromPosition(\n                new float3(x * authoring.TileSize, 0, y * authoring.TileSize)));\n            SetComponent(tile, new TileData { GridX = x, GridY = y });\n\n            tileRefs.Add(new TileEntityRef { Value = tile });\n        }\n    }\n}\n```\n\n## Anti-Patterns\n- Forgetting BakingOnlyEntity on a staging\u002Fintermediate entity — it persists in the runtime world as a useless empty entity.\n- Calling AddComponent separately for each component on a newly created entity — N structural changes instead of 1. Use ComponentTypeSet.\n- Not registering DependsOn for source data that determines the entity count — Baker won't rerun when the count changes.\n\n## Runtime Risks\n- Missing BakingOnlyEntity: unwanted entities in runtime world pollute archetypes, waste chunk space, may be incorrectly matched by queries.\n\n## Performance Notes\n- ComponentTypeSet batch add: 1 archetype migration vs N separate migrations. Critical for Bakers that create hundreds of additional entities.\n- Additional entities created by a Baker are tied to the authoring GO's lifetime — no manual lifecycle management needed.\n\n## Architecture Guidance\nUse multi-entity Bakers when the authoring representation is inherently different from the runtime representation (e.g., \"a 10×10 grid\" in authoring → 100 individual tile entities at runtime). For runtime spawning patterns, keep the Baker to a prefab reference and spawn at runtime.\n\n## Related Skills\n[[baker-authoring-conversion]], [[baking-type-component]]\n","# Multi-Entity Baker\n\n## Intent\nCreate multiple runtime entities from a single authoring GameObject using CreateAdditionalEntity, with BakingOnlyEntity marking staging entities that should not appear in the runtime world.\n\n## Use When\nOne authoring GO conceptually represents N runtime entities (procedural tiles, image-to-entity conversion, mesh-to-particle conversion, grid spawning). The N is known at bake time from authoring data.\n\n## Avoid When\nThe count is not known at bake time (runtime-spawned entities) — use EntityCommandBuffer at runtime instead. Avoid when the additional entities are purely internal staging entities that a baking system will process — use [BakingType] buffer + baking system instead.\n\n## Senior Pattern\n- Call `CreateAdditionalEntity(TransformUsageFlags.X)` inside the Baker to create each additional entity.\n- Use `AddBuffer\u003CT>(mainEntity)` to pass the list of additional entities to a baking system via a [BakingType] buffer.\n- Use `AddComponent(entity, new ComponentTypeSet(...))` to batch-add all components in one structural change.\n- Call `AddComponent\u003CBakingOnlyEntity>(stagingEntity)` on any entity that exists only to carry data to a baking system and should not appear in the runtime world.\n- SetComponent after AddComponent to initialise transform and data.\n\n## Code Template\n```csharp\n[BakingType]\npublic struct TileEntityRef : IBufferElementData\n{\n    public Entity Value;\n}\n\nclass Baker : Baker\u003CTileGridAuthoring>\n{\n    public override void Bake(TileGridAuthoring authoring)\n    {\n        var mainEntity = GetEntity(TransformUsageFlags.None);\n\n        \u002F\u002F main entity is only a staging container\n        AddComponent\u003CBakingOnlyEntity>(mainEntity);\n\n        var tileRefs = AddBuffer\u003CTileEntityRef>(mainEntity);\n\n        for (int y = 0; y \u003C authoring.Height; y++)\n        for (int x = 0; x \u003C authoring.Width; x++)\n        {\n            var tile = CreateAdditionalEntity(TransformUsageFlags.ManualOverride);\n\n            \u002F\u002F Single structural change for all components\n            AddComponent(tile, new ComponentTypeSet(\n                ComponentType.ReadWrite\u003CLocalTransform>(),\n                ComponentType.ReadWrite\u003CLocalToWorld>(),\n                ComponentType.ReadWrite\u003CTileData>()\n            ));\n            SetComponent(tile, LocalTransform.FromPosition(\n                new float3(x * authoring.TileSize, 0, y * authoring.TileSize)));\n            SetComponent(tile, new TileData { GridX = x, GridY = y });\n\n            tileRefs.Add(new TileEntityRef { Value = tile });\n        }\n    }\n}\n```\n\n## Anti-Patterns\n- Forgetting BakingOnlyEntity on a staging\u002Fintermediate entity — it persists in the runtime world as a useless empty entity.\n- Calling AddComponent separately for each component on a newly created entity — N structural changes instead of 1. Use ComponentTypeSet.\n- Not registering DependsOn for source data that determines the entity count — Baker won't rerun when the count changes.\n\n## Runtime Risks\n- Missing BakingOnlyEntity: unwanted entities in runtime world pollute archetypes, waste chunk space, may be incorrectly matched by queries.\n\n## Performance Notes\n- ComponentTypeSet batch add: 1 archetype migration vs N separate migrations. Critical for Bakers that create hundreds of additional entities.\n- Additional entities created by a Baker are tied to the authoring GO's lifetime — no manual lifecycle management needed.\n\n## Architecture Guidance\nUse multi-entity Bakers when the authoring representation is inherently different from the runtime representation (e.g., \"a 10×10 grid\" in authoring → 100 individual tile entities at runtime). For runtime spawning patterns, keep the Baker to a prefab reference and spawn at runtime.\n\n## Related Skills\n[[baker-authoring-conversion]], [[baking-type-component]]\n",{"name":5,"tags":34,"metadata":35,"description":7},[28],{"tier":36,"internal-only":37},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Fmulti-entity-baker",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":47,"prompt":57,"zipAvailable":37},[48,51,54],{"tool":49,"command":50},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill multi-entity-baker",{"tool":52,"command":53},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill multi-entity-baker",{"tool":55,"command":56},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill multi-entity-baker","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Fmulti-entity-baker\u002FSKILL.md",[],[60,85,107,132,152,173],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":29},"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",[],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],"update","dots update groups","boundary","simulation","how","system","choose","work","use","never","peer","deterministic","how to","coupling","ecs","bugs","frame","value",{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":29},"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",[],[92,93,94,95,69,72,96,97,75,98,24,99,100,26,101,102,103,104,105,106],"patterns","transform","dots transform patterns","components","mount","model","cost","systems","input","matrix","socket","at","child","custom","hierarchy",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":29},"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",[113],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[92,119,120,121,122,123,124,72,97,75,125,126,127,24,128,129,26,83,130,131],"singleton","dots singleton patterns","component","config","state","game","writer","time","shared","contract","as","ecb","gating",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":29},"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",[],[139,140,141,142,95,123,69,143,144,74,145,146,75,24,147,148,100,149,150,151],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","unity","material","for","managed",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":29},"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",[],[159,160,81,161,162,95,163,164,165,97,74,166,167,92,168,169,100,170,171,172],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","structural","events","static","request",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":190,"publishedAt":29},"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",[179,184,187],{"categoryNo":180,"categoryName":181,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":185,"categoryName":186,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":188,"categoryName":189,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000023","Skill与智能体开发",[191,192,193,194,195,196,197,198,199,200,201,202,203,204,148,205,150],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete"]