assembly-definitions
Assembly definition management — when to create asmdefs, reference rules, Editor/Runtime/Test separation, platform filters, compilation speed optimization.
Universal Render Pipeline — URP asset configuration, renderer features, 2D renderer, lighting, shadows, post-processing volumes, SRP Batcher.
$ npx -y skills add XeldarAlz/everything-claude-unity --skill urp-pipeline --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/urp-pipelineContext preview
The summary Claude sees to decide when to auto-load this skill.
Universal Render Pipeline — URP asset configuration, renderer features, 2D renderer, lighting, shadows, post-processing volumes, SRP Batcher.
name: urp-pipeline description: "Universal Render Pipeline — URP asset configuration, renderer features, 2D renderer, lighting, shadows, post-processing volumes, SRP Batcher." globs: ["**/URP*.asset", "**/*Renderer*.asset", "**/*Volume*.cs"]
The URP Pipeline Asset controls global rendering settings. Create via Assets > Create > Rendering > URP Asset (with Universal Renderer).
| Setting | Recommended | Notes | |---------|-------------|-------| | HDR | Enabled | Required for Bloom and color grading | | Anti-Aliasing | MSAA 4x or FXAA | MSAA on mobile, FXAA on desktop | | Shadow Resolution | 2048 (desktop) / 1024 (mobile) | Balance quality vs performance | | Shadow Cascade Count | 4 (desktop) / 2 (mobile) | More cascades = better shadow distribution | | Shadow Distance | 50-150 | Depends on game scale | | SRP Batcher | Enabled | Major draw call optimization | | Dynamic Batching | Disabled when SRP Batcher is on | They conflict; SRP Batcher is superior |
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class URPQualityManager : MonoBehaviour
{
[SerializeField] private UniversalRenderPipelineAsset[] qualityLevels;
public void SetQualityLevel(int level)
{
if (level >= 0 && level < qualityLevels.Length)
{
QualitySettings.renderPipeline = qualityLevels[level];
}
}
public void AdjustShadowDistance(float distance)
{
var urpAsset = (UniversalRenderPipelineAsset)QualitySettings.renderPipeline;
urpAsset.shadowDistance = distance;
}
}Renderer Features let you inject custom rendering logic into URP's render pipeline.
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class OutlineRendererFeature : ScriptableRendererFeature
{
[System.Serializable]
public class OutlineSettings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
public Material outlineMaterial;
public LayerMask layerMask;
[Range(1, 4)] public int downSample = 1;
}
public OutlineSettings settings = new OutlineSettings();
private OutlineRenderPass _outlinePass;
public override void Create()
{
_outlinePass = new OutlineRenderPass(settings);
_outlinePass.renderPassEvent = settings.renderPassEvent;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (settings.outlineMaterial == null) return;
renderer.EnqueuePass(_outlinePass);
}
}using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class OutlineRenderPass : ScriptableRenderPass
{
private readonly OutlineRendererFeature.OutlineSettings _settings;
private RTHandle _tempTexture;
public OutlineRenderPass(OutlineRendererFeature.OutlineSettings settings)
{
_settings = settings;
profilingSampler = new ProfilingSampler("OutlinePass");
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
var desc = renderingData.cameraData.cameraTargetDescriptor;
desc.depthBufferBits = 0;
RenderingUtils.ReAllocateIfNeeded(ref _tempTexture, desc, name: "_TempOutline");
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer cmd = CommandBufferPool.Get();
using (new ProfilingScope(cmd, profilingSampler))
{
var source = renderingData.cameraData.renderer.cameraColorTargetHandle;
Blitter.BlitCameraTexture(cmd, source, _tempTexture, _settings.outlineMaterial, 0);
Blitter.BlitCameraTexture(cmd, _tempTexture, source);
}
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
public override void OnCameraCleanup(CommandBuffer cmd)
{
_tempTexture?.Release();
}
}Set in the Universal Renderer Data asset under Rendering Path.
For 2D games, use the 2D Renderer:
1. Create URP Asset with 2D Renderer (Assets > Create > Rendering > URP Asset with 2D Renderer) 2. 2D Renderer supports: Light2D, ShadowCaster2D, Sprite-Lit-Default shader 3. Use Light2D components: Global, Freeform, Sprite, Point, Spot
using UnityEngine;
using UnityEngine.Rendering.Universal;
public class DynamicLight2DController : MonoBehaviour
{
private Light2D _light2D;
private void Awake()
{
_light2D = GetComponent<Light2D>();
}
public void SetIntensity(float intensity)
{
_light2D.intensity = intensity;
}
public void FlickerLight(float minIntensity, float maxIntensity)
{
_light2D.intensity = Random.Range(minIntensity, maxIntensity);
}
}Pipeline Asset: Shadow Distance: 100 Cascade Count: 4 Cascade Ratios: 0.067, 0.2, 0.467 (default) Depth Bias: 1 No
The ultimate Claude Code toolkit for Unity game development. A production-ready, plug-and-play system that gives Claude Code deep Unity expertise — from writing performant C# to building scenes, profiling performance, and triggering iOS/Android builds — all
Assembly definition management — when to create asmdefs, reference rules, Editor/Runtime/Test separation, platform filters, compilation speed optimization.
Structured commit trailers — adds Constraint, Rejected, Scope-risk, and Not-tested metadata to commit messages. Captures architectural decisions and known gaps…
Ambiguity gating — detects vague feature requests and forces structured requirements gathering with scoring across scope, platform, performance, integration,…
Event system patterns — C# events, UnityEvent, SO event channels, static EventBus. When to use each, zero-allocation patterns, memory leak prevention.
Configures Claude Code's statusline to display Unity workflow state — current phase, active agent, files modified, and session duration.
Post-debugging knowledge extraction — captures non-obvious, codebase-specific learnings that pass quality gates. Invoke after resolving tricky bugs or…