unity-ecs-patterns
Implementar patrones Unity ECS
La creación de juegos Unity de alto rendimiento requiere patrones especializados orientados a datos que la POO tradicional no puede proporcionar. Esta habilidad proporciona patrones ECS listos para producción usando DOTS, Jobs y Burst para juegos que escalan a miles de entidades.
Descargar el ZIP de la skill
Subir en Claude
Ve a Configuración → Capacidades → Skills → Subir skill
Activa y empieza a usar
Pruébalo
Usando "unity-ecs-patterns". Crear un componente ECS para la salud del jugador con valores actuales y máximos, y un sistema que cura jugadores con el tiempo.
Resultado esperado:
- Definición de componente:
- ```csharp
- public struct Health : IComponentData
- {
- public float Current;
- public float Max;
- }
- ```
- Sistema de curación:
- ```csharp
- [BurstCompile]
- public partial struct HealthRegenSystem : ISystem
- {
- public void OnUpdate(ref SystemState state)
- {
- float deltaTime = SystemAPI.Time.DeltaTime;
- float regenRate = 5f;
- foreach (var health in
- SystemAPI.Query<RefRW<Health>>())
- {
- health.ValueRW.Current = math.min(
- health.ValueRO.Max,
- health.ValueRO.Current + regenRate * deltaTime
- );
- }
- }
- }
- ```
Usando "unity-ecs-patterns". ¿Cómo convierto un GameObject a una entidad con authoring?
Resultado esperado:
- 1. Crear un Authoring MonoBehaviour:
- ```csharp
- public class EnemyAuthoring : MonoBehaviour
- {
- public float Speed;
- public float Health;
- class Baker : Baker<EnemyAuthoring>
- {
- public override void Bake(EnemyAuthoring authoring)
- {
- var entity = GetEntity(TransformUsageFlags.Dynamic);
- AddComponent(entity, new Speed { Value = authoring.Speed });
- AddComponent(entity, new Health { Current = authoring.Health, Max = authoring.Health });
- }
- }
- }
- ```
- 2. Añadir el componente authoring a un GameObject en el Editor
- 3. El sistema de baking lo convierte automáticamente a una entidad en tiempo de compilación
Usando "unity-ecs-patterns". Escribir un trabajo paralelo que dañe a todos los enemigos en un radio alrededor de cada entidad.
Resultado esperado:
Esto requiere un enfoque de hash espacial. Primero, construir un mapa de hash espacial en un trabajo paralelo. Luego ejecutar un segundo paso que consulte celdas cercanas y aplique daño. La función de hash usa multiplicación de números primos para distribución uniforme: `hash = x * 73856093 ^ y * 19349663 ^ z * 83492791`.
Auditoría de seguridad
SeguroAll 59 static findings are false positives. The skill contains Unity ECS documentation with code examples. Detected patterns (hash functions, system API references, backticks) are legitimate game development patterns and Markdown formatting, not security threats.
Puntuación de calidad
Lo que puedes crear
Desarrollador indie creando juegos críticos en rendimiento
Crear sistemas de juego eficientes que manejen miles de enemigos, partículas o unidades sin degradación de rendimiento usando patrones ECS.
Programador de gameplay aprendiendo DOTS
Transicionar de patrones Unity MonoBehaviour tradicionales a arquitectura ECS orientada a datos con ejemplos guiados y mejores prácticas.
Artista técnico creando sistemas de partículas
Crear sistemas masivos de partículas y efectos que procesen en paralelo usando Jobs y compilación Burst para rendimiento tipo GPU en CPU.
Prueba estos prompts
Crear un componente Speed y un MovementSystem en Unity ECS usando ISystem y BurstCompile. El sistema debe mover entidades hacia adelante basándose en su valor de velocidad.
Escribir un SpawnSystem que use EntityCommandBuffer para crear entidades en tiempo de ejecución con un componente Spawner. Incluir versiones de trabajo mono-hilo y paralelo.
Crear un CharacterAspect que agrupe los componentes Health, Speed y LocalTransform. Incluir un método para aplicar daño que respete la lógica de absorción de escudo.
Construir un sistema de hash espacial usando NativeParallelMultiHashMap para consultas eficientes de colisiones. Incluir la función hash y trabajo paralelo para actualizar la rejilla espacial.
Mejores prácticas
- Usar ISystem en lugar de SystemBase para máximo rendimiento y compatibilidad con Burst
- Siempre aplicar [BurstCompile] a trabajos y sistemas para rendimiento óptimo
- Diferir cambios estructurales (crear/destruir/agregar) usando EntityCommandBuffer para evitar romper la programación de trabajos
Evitar
- Evitar añadir tipos gestionados (clases, strings, arrays) a componentes ya que rompen la compilación con Burst
- No realizar cambios estructurales dentro de trabajos paralelos; usar EntityCommandBuffer.ParallelWriter en su lugar
- Evitar consultar entidades una por una; usar consultas de entidades y ToComponentDataArray para operaciones por lotes
Preguntas frecuentes
¿Qué versión de Unity soporta ECS?
¿Cómo es ECS diferente de MonoBehaviour?
¿Puedo mezclar ECS con GameObjects tradicionales?
¿Qué es Burst y por qué debería usarlo?
¿Cuántas entidades puede manejar ECS?
¿Debo usar Aspects o acceso directo a componentes?
Detalles del desarrollador
Autor
wshobsonLicencia
MIT
Repositorio
https://github.com/wshobson/agents/tree/main/plugins/game-development/skills/unity-ecs-patternsRef.
main
Estructura de archivos
📄 SKILL.md