Use this skill when working with Unity game engine - C# scripting, Entity Component System (ECS/DOTS), physics simulation, shader programming (ShaderLab, HLSL, Shader Graph), and UI Toolkit. Triggers on gameplay programming, MonoBehaviour lifecycle, component architecture, rigidbody physics, raycasting, collision handling, custom shader authoring, material configuration, USS styling, UXML layout, and performance optimization for real-time applications. Acts as a senior Unity engineer advisor for game developers building production-quality games and interactive apps.
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
name
unity-development
version
0.1.0
description
Use this skill when working with Unity game engine - C# scripting, Entity Component System (ECS/DOTS), physics simulation, shader programming (ShaderLab, HLSL, Shader Graph), and UI Toolkit. Triggers on gameplay programming, MonoBehaviour lifecycle, component architecture, rigidbody physics, raycasting, collision handling, custom shader authoring, material configuration, USS styling, UXML layout, and performance optimization for real-time applications. Acts as a senior Unity engineer advisor for game developers building production-quality games and interactive apps.
When this skill is activated, always start your first response with the 🧢 emoji.
Unity Development
A senior Unity engineer's decision-making framework for building production-quality
games and interactive applications. This skill covers five pillars - C# scripting,
ECS/DOTS, physics, shaders, and UI Toolkit - with emphasis on when to use each
pattern and the trade-offs involved. Designed for developers who know basic Unity
concepts and need opinionated guidance on architecture, performance, and best practices
for shipping real projects.
When to use this skill
Trigger this skill when the user:
Writes or refactors C# scripts for Unity (MonoBehaviour, ScriptableObject, coroutines)
Architects gameplay systems using component patterns or ECS/DOTS
Configures rigidbody physics, collision detection, raycasting, or joints
Authors custom shaders in ShaderLab/HLSL or builds Shader Graph nodes
Builds UI with UI Toolkit (UXML, USS, C# bindings)
Optimizes frame rate, memory, draw calls, or GC allocations
Needs Unity-specific patterns for input handling, scene management, or asset pipelines
Debugs Unity Editor errors, serialization issues, or build problems
Do NOT trigger this skill for:
Unreal Engine, Godot, or other non-Unity game engines
General C# questions unrelated to Unity (use a C#/.NET skill instead)
Key principles
Composition over inheritance - Unity's component model rewards small, focused
components attached to GameObjects. Deep MonoBehaviour inheritance hierarchies
become brittle. Prefer ScriptableObjects for shared data and interfaces for
polymorphic behavior.
Data-oriented thinking - Even before adopting ECS, think about data layout.
Avoid scattered heap allocations in hot paths. Cache component references in
Awake(). Use struct-based data where possible. The garbage collector is your
enemy in a 60fps loop.
Physics and rendering are separate worlds - Physics runs on FixedUpdate at a
fixed timestep. Rendering runs on Update at variable framerate. Never mix them.
Movement that involves Rigidbody goes in FixedUpdate. Camera follow and input
polling go in Update or LateUpdate.
Shaders express intent, not code - A shader describes what a surface looks
like under light, not step-by-step instructions. Think in terms of properties
(albedo, normal, metallic, emission) and how they respond to lighting. Start with
Shader Graph for prototyping, drop to HLSL only when you need fine control.
UI Toolkit is the future, UGUI is the present - UI Toolkit (USS/UXML) follows
web-like patterns and is Unity's strategic direction. Use it for editor tools and
runtime UI in new projects. Fall back to UGUI only for legacy codebases or when
UI Toolkit lacks a specific feature.
Core concepts
Unity's runtime is built on the GameObject-Component architecture. A GameObject is
an empty container. Components (MonoBehaviour scripts, Colliders, Renderers) give
it behavior and appearance. The Scene is the hierarchy of GameObjects. The
Asset Pipeline manages how resources (textures, models, audio) are imported,
processed, and bundled.
The MonoBehaviour lifecycle drives script execution: Awake -> OnEnable -> Start ->
FixedUpdate (physics) -> Update (frame logic) -> LateUpdate (post-frame cleanup) ->
OnDisable -> OnDestroy. Understanding this order prevents 90% of timing bugs.
ECS/DOTS is Unity's data-oriented alternative. Entities replace GameObjects,
Components are pure data structs, and Systems contain logic that operates on component
queries. ECS delivers massive performance gains for large entity counts (10k+) but
requires a fundamentally different coding style.
The Render Pipeline determines how shaders execute. Unity offers URP (Universal
Render Pipeline) for cross-platform and HDRP (High Definition) for high-end visuals.
Shader code must target the active pipeline - a URP shader won't work in HDRP.
Common tasks
Write a MonoBehaviour with proper lifecycle
Cache references in Awake, subscribe to events in OnEnable, unsubscribe in OnDisable.
Never use GetComponent in Update.
Never store runtime-mutable state in ScriptableObjects during Play mode in builds.
Changes persist in the Editor but not in built players, causing subtle bugs.
Set up an ECS system with DOTS
Define a component as a struct, then write a system that queries and processes it.
// Component - pure data, no logicpublicstruct MoveSpeed : IComponentData
{
publicfloat Value;
}
// System - processes all entities with MoveSpeed + LocalTransform
[BurstCompile]
publicpartialstruct MoveForwardSystem : ISystem
{
[BurstCompile]
publicvoidOnUpdate(ref SystemState state)
{
float dt = SystemAPI.Time.DeltaTime;
foreach (var (transform, speed) in
SystemAPI.Query<RefRW<LocalTransform>, RefRO<MoveSpeed>>())
{
transform.ValueRW.Position +=
transform.ValueRO.Forward() * speed.ValueRO.Value * dt;
}
}
}
ECS requires the Entities package. Use Burst + Jobs for maximum throughput. Avoid
managed types (classes, strings) in components - they break Burst compilation.
Configure physics and collision detection
Choose between discrete (fast, can tunnel through thin objects) and continuous (safe,
more expensive) collision detection based on object speed.
// Raycast from camera to detect clickable objectsif (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition),
out RaycastHit hit, 100f, interactableLayer))
{
hit.collider.GetComponent<IInteractable>()?.Interact();
}
Collision matrix rule: Use layers + the Physics Layer Collision Matrix to disable
unnecessary collision checks. A "Bullet" layer that only collides with "Enemy" and
"Environment" saves significant CPU.
Use Physics.OverlapSphereNonAlloc instead of Physics.OverlapSphere to avoid
GC allocations in hot paths. Pre-allocate the results array.
Write a custom URP shader in ShaderLab/HLSL
Minimal unlit shader for URP that supports a base color and texture.
Always wrap per-material properties in CBUFFER_START(UnityPerMaterial) for SRP
Batcher compatibility. Without this, you lose batching and pay per-draw-call cost.
Build runtime UI with UI Toolkit
Define layout in UXML, style with USS, bind data in C#.
Use Rigidbody.MovePosition or AddForce in FixedUpdate
Using public fields for Inspector exposure
Breaks encapsulation, pollutes the API surface
Use [SerializeField] private fields
String-based Find/SendMessage
Fragile, zero compile-time safety, slow
Use direct references, events, or ScriptableObject channels
Allocating in hot loops (new List, LINQ)
GC spikes cause frame hitches
Pre-allocate collections, use NonAlloc physics APIs
One giant "GameManager" MonoBehaviour
God object that couples everything
Split into focused systems with clear responsibilities
Writing shaders without SRP Batcher support
Every material becomes a separate draw call
Use CBUFFER_START(UnityPerMaterial) for all per-material props
Mixing UI Toolkit and UGUI in the same screen
Two separate event systems fighting each other
Pick one per UI surface, don't mix
Gotchas
Modifying a ScriptableObject's values in Play mode persists in the Editor but not in builds - ScriptableObject assets are shared references. Changes made to their fields during Play mode in the Editor are saved to the asset file and persist after stopping. In a build, there is no asset file to save to, so changes are lost on scene reload. Use runtime clones (Instantiate()) for mutable per-game-session data.
OnEnable runs before Start but after Awake on scene load - and again on every re-enable - Code in OnEnable that subscribes to events will subscribe again every time the GameObject is disabled and re-enabled. Always unsubscribe in OnDisable. Missing this causes duplicate event handlers that accumulate across scene loads.
Rigidbody interpolation causes visual lag without it, jitter with it misapplied - If you move a Rigidbody in FixedUpdate without interpolation, visual movement is choppy on high-framerate screens. Setting Rigidbody.interpolation = Interpolate smooths rendering but adds one physics frame of lag. Camera follow scripts must run in LateUpdate after physics resolves to avoid camera jitter.
ECS Burst compilation fails silently on managed type references - If a DOTS component or system references a managed type (class, string, array), the Burst compiler silently falls back to non-Burst execution without error. Performance-sensitive systems will run at MonoBehaviour speeds. Use [BurstDiscard] intentionally and check the Burst Inspector for compilation errors.
URP and HDRP shaders are not interchangeable - A shader written for URP (using UniversalPipeline render pipeline tag and UniversalForwardPass) will appear as an unlit pink fallback in HDRP, and vice versa. Always specify the target render pipeline in the SubShaderTags block and confirm the project's Graphics settings.
References
For detailed patterns and implementation guidance on specific domains, read the
relevant file from the references/ folder:
references/csharp-patterns.md - advanced C# patterns for Unity (object pooling, state machines, dependency injection, async/await)
references/ecs-dots.md - deep dive on Entity Component System, Jobs, Burst compiler, and hybrid workflows
references/ui-toolkit.md - runtime UI patterns, data binding, custom controls, USS advanced selectors, ListView virtualization
Only load a references file if the current task requires it - they are long and
will consume context.
Companion check
On first activation of this skill in a conversation: check which companion skills are installed by running ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null. Compare the results against the recommended_skills field in this file's frontmatter. For any that are missing, mention them once and offer to install: