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 working in a Unity project that uses Entities (DOTS) or when a task needs thousands of simulated objects - when ECS is worth it, components/bakers/ISystem with IJobEntity and Burst, entity command buffers for structural changes, native memory rules, and testing systems in a test World.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Unity's Entities package stores data in tightly packed chunks and runs Burst-compiled jobs over it in parallel. It scales to tens of thousands of entities where GameObjects choke — and it makes simple gameplay code more verbose. Use it where the scale needs it, follow the project's existing split between GameObjects and entities, and never introduce DOTS into a GameObject project on your own initiative.
Core principle: Components are plain data, systems are Burst-compiled ISystems scheduling jobs, and structural changes go through an entity command buffer.
| Situation | Use |
|---|---|
| Thousands of similar units, projectiles, boids, crowd agents | ECS (or Jobs + Burst over native arrays first) |
| Heavy simulation with little per-object uniqueness | ECS |
| UI, menus, a handful of characters, bespoke scripted moments | GameObjects |
| Mixed game | Hybrid: entities for the swarm, GameObjects for the player, UI and cameras |
// Data: unmanaged structs
public struct Speed : IComponentData { public float Value; }
public struct Target : IComponentData { public float3 Position; }
// Authoring + baking: designers edit a MonoBehaviour in a subscene; the baker turns it into components
public sealed class SpeedAuthoring : MonoBehaviour {
public float value = 5f;
sealed class Baker : Baker<SpeedAuthoring> {
public override void Bake(SpeedAuthoring a) {
var e = GetEntity(TransformUsageFlags.Dynamic);
AddComponent(e, new Speed { Value = a.value });
}
}
}
// Behaviour: a Burst-compiled ISystem scheduling a parallel IJobEntity
[BurstCompile]
public partial struct SeekSystem : ISystem {
[BurstCompile] public void OnCreate(ref SystemState state) => state.RequireForUpdate<Speed>();
[BurstCompile] public void OnUpdate(ref SystemState state) {
new SeekJob { Dt = SystemAPI.Time.DeltaTime }.ScheduleParallel();
}
}
[BurstCompile]
partial struct SeekJob : IJobEntity {
public float Dt;
void Execute(ref LocalTransform transform, in Speed speed, in Target target) {
var to = target.Position - transform.Position;
var dist = math.length(to);
if (dist > 0.01f) transform.Position += to / dist * math.min(speed.Value * Dt, dist);
}
}
ISystem with [BurstCompile] over SystemBase for new systems; SystemBase only where managed objects are unavoidable.List<T>) in components or jobs that should be Burst-compiled; use FixedString, NativeArray, DynamicBuffer.in for read-only, ref for written components in Execute — it drives the dependency system and parallelism.var ecb = SystemAPI.GetSingleton<EndSimulationEntityCommandBufferSystem.Singleton>()
.CreateCommandBuffer(state.WorldUnmanaged).AsParallelWriter();
new ExpireJob { Ecb = ecb, Now = (float)SystemAPI.Time.ElapsedTime }.ScheduleParallel();
// in the job: void Execute([ChunkIndexInQuery] int key, Entity e, in Lifetime l) { if (Now > l.EndsAt) Ecb.DestroyEntity(key, e); }
IEnableableComponent) instead of add/remove, which moves the entity between chunks.NativeArray/NativeList is disposed — Allocator.Temp inside a frame, TempJob within four frames, Persistent in OnDestroy. Leak warnings are bugs.IAspect) are deprecated in recent Entities releases — use explicit component parameters and queries instead of adding new ones.Update system.public class SeekSystemTests {
World _world; EntityManager _em;
[SetUp] public void SetUp() { _world = new World("Test"); _em = _world.EntityManager; }
[TearDown] public void TearDown() => _world.Dispose();
[Test] public void Update_EntityWithSpeed_MovesTowardTarget() {
var e = _em.CreateEntity(typeof(LocalTransform), typeof(Speed), typeof(Target));
_em.SetComponentData(e, LocalTransform.FromPosition(float3.zero));
_em.SetComponentData(e, new Speed { Value = 2f });
_em.SetComponentData(e, new Target { Position = new float3(10, 0, 0) });
var system = _world.CreateSystem<SeekSystem>();
_world.SetTime(new TimeData(elapsedTime: 0.5, deltaTime: 0.5f));
system.Update(_world.Unmanaged);
_em.CompleteAllTrackedJobs();
Assert.That(_em.GetComponentData<LocalTransform>(e).Position.x, Is.EqualTo(1f).Within(1e-4));
}
}
World per test, disposed in teardown; create only the systems under test.Ghost components replicate state; prediction runs in the predicted simulation group; input travels as IInputComponentData. Server-authority rules from game-networking still apply — validate input on the server world.
EntityManager calls in a hot loop on the main thread.RequireForUpdate, so a system runs (and throws) before its data exists.SystemBase + Entities.ForEach in new code (legacy API).Dispose.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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
日本語の概要は準備中です。原文の説明を表示しています。