Handle Unity's asynchronous programming patterns including coroutines, async/await, and Job System. Masters Unity's main thread restrictions and threading models. Use when guidance needed on Unity async operations, coroutine optimization, or parallel processing in Unity context.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
references/coroutine-patterns.mdreferences/unity-async-best-practices.mdreferences/unity-threading.md⚠️ REQUIRED SKILL: This skill depends on and automatically references
csharp-async-patternsfor foundational async/await knowledge.What this means: When unity-async is activated, Claude will automatically consult the csharp-async-patterns skill for:
- Task and async/await fundamentals
- CancellationToken patterns
- ConfigureAwait usage
- Error handling in async code
- ValueTask optimization
Learning Path: Master C# async basics via
csharp-async-patterns→ Apply Unity-specific constraints and patterns via this skill
🔧 Foundation:
unity-csharp-fundamentals- Required Unity C# patterns (TryGetComponent, FindAnyObjectByType, null-safe coding)
Unity-specific async patterns extending foundational C# async/await concepts.
Core Topics:
Learning Path: C# async basics → Unity context → UniTask optimization → Reactive patterns
// 1. Coroutine (Unity-specific, frame-based)
IEnumerator LoadDataCoroutine()
{
yield return new WaitForSeconds(1f);
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
ProcessData(request.downloadHandler.text);
}
// 2. Async/Await (C# standard + Unity constraints)
async Task<string> LoadData(CancellationToken ct)
{
await Task.Delay(1000, ct);
using UnityWebRequest request = UnityWebRequest.Get(url);
await request.SendWebRequest();
return request.downloadHandler.text;
// Unity auto-marshals to main thread
}
// 3. Job System (parallel data processing)
[BurstCompile]
struct VelocityJob : IJobParallelFor
{
[ReadOnly] public NativeArray<Vector3> velocities;
public NativeArray<Vector3> positions;
public float deltaTime;
public void Execute(int index)
{
positions[index] += velocities[index] * deltaTime;
}
}
yield return null; // Next frame
yield return new WaitForEndOfFrame(); // After rendering
yield return new WaitForFixedUpdate(); // Physics update
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("Scene");
while (!asyncLoad.isDone)
{
float progress = Mathf.Clamp01(asyncLoad.progress / 0.9f);
yield return null;
}
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>("AssetKey");
await handle.Task;
GameObject prefab = handle.Result;
Unity Async Needs
├── Frame timing → unity-async (coroutines)
├── Standard async → unity-async (async/await)
├── Parallel data → unity-async (Job System)
├── Zero-allocation → unity-unitask-pro agent
└── Reactive patterns → unity-reactive-pro agent