Communitygithub.com

unity-technologies/2d-pixel-perfect

Configura, diagnostica y corrige el renderizado 2D perfecto en píxeles en proyectos Unity. Úsalo al trabajar en cualquier juego 2D de estilo retro o pixel art.

¿Qué es 2d-pixel-perfect?

Esta habilidad está diseñada para desarrolladores de Unity que trabajan en juegos 2D con estilo retro o pixel art, y que necesitan asegurar un renderizado nítido y perfecto en píxeles. La habilidad gestiona las dos implementaciones completamente separadas e incompatibles de Pixel Perfect Camera en Unity: una para el pipeline de renderizado URP (Universal Render Pipeline) y otra para el pipeline Built-in (estándar). Su enfoque es diagnóstico: primero detecta automáticamente el pipeline activo mediante una función `DetectPipeline()`, luego verifica una lista completa de configuraciones en sprites, cámara, cuadrícula y calidad del proyecto, y finalmente aplica correcciones precisas solo a los elementos defectuosos. Cubre plataformas Unity (Editor), es compatible con URP y Built-in (no con HDRP), e incluye referencias de código para configuración de sprites, cámara URP y Built-in, y detección de migraciones. También aborda problemas comunes como sprites borrosos (solución principal: Filter Mode = Point), espacios entre tiles del tilemap, conflictos con Cinemachine, y efectos secundarios de `UpscaleRenderTexture` en post-procesado y texto UI. La habilidad enfatiza trabajar en ámbito de escena por defecto, reportar hallazgos antes de actuar, y no modificar configuraciones que ya funcionan correctamente.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/unity-technologies/skills/tree/main/skills/2d-pixel-perfect

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Configura, diagnostica y corrige el renderizado 2D perfecto en píxeles en proyectos Unity.


⚠️ Hay Dos Implementaciones Completamente Separadas

El renderizado perfecto en píxeles en Unity no es un sistema único — son dos implementaciones separadas e incompatibles, una por pipeline de renderizado. Siempre detecta el pipeline antes de escribir o diagnosticar cualquier código.

URPBuilt-in
ComponenteUnityEngine.Rendering.Universal.PixelPerfectCameraUnityEngine.U2D.PixelPerfectCamera
PaqueteIntegrado en URP — sin instalación extracom.unity.2d.pixel-perfect v6.0.0+
Estilo de APIEnumeraciones (gridSnapping, cropFrame)Booleanos (pixelSnapping, upscaleRT, cropFrameX/Y)

No instales com.unity.2d.pixel-perfect en un proyecto URP.

→ Siempre llama primero a DetectPipeline() (references/pipeline-detection.cs), luego bifurca tu configuración, diagnóstico y correcciones según el resultado.


Cuándo NO usar esta habilidad

  • Juegos 2D HD o de alta resolución — el pixel snapping y el filtrado Point harán que el arte suave se vea incorrecto
  • Escenas solo de UI — usa Canvas Scaler en su lugar
  • Proyectos HDRP — Pixel Perfect Camera no es compatible

Recordatorios Críticos

⚠️ Detecta el pipeline de renderizado primero — URP y Built-in usan componentes Pixel Perfect Camera diferentes que no son intercambiables. ⚠️ Filter Mode = Point es la solución #1 — el filtrado bilineal es el valor predeterminado de Unity y casi siempre es la causa de sprites borrosos. ⚠️ El Anti-Aliasing debe estar desactivado — en la Configuración de Calidad y en la cámara. El AA desenfoca activamente los bordes de los píxeles.

Principios Clave

1. Detección del Pipeline y Selección del Componente de Cámara

Consulta la tabla de comparación de dos rutas al inicio de este archivo. Nota sobre el ensamblado: el paquete independiente Built-in se instala en una carpeta Runtime/, pero el campo "name" del asmdef es Unity.2D.PixelPerfect — sin el sufijo Runtime. HDRP no es compatible — consulta la sección de fallback para HDRP en Problemas Comunes.

→ Código: references/pipeline-detection.cs — DetectPipeline(), GetPixelPerfectCameraType(), y verificación de migración incorrecta.

2. Enfoque Diagnóstico-Primero

Siempre diagnostica antes de hacer cambios. Reporta hallazgos, luego corrige solo lo que está roto.

3. Trabaja en el ámbito correcto

Por defecto, trabaja en el ámbito de la escena. Escanea en todo el proyecto solo cuando el usuario lo solicite explícitamente.


Lista de Verificación de Diagnóstico

Configuración de importación de sprites:

  • Filter Mode = Point (sin filtro) en todos los sprites del ámbito
  • Mip Maps = desactivados
  • Compresión = Ninguna / Sin comprimir
  • PPU consistente en todos los sprites de la escena
  • Pivotes de sprites configurados en Modo Personalizado / Píxeles — un pivote central en un sprite de dimensión impar (ej. 15×15) cae en 7.5px, causando desalineación de 0.5px

→ Código: references/sprite-settings.cs — GetImporter() y FixSpriteImportSettings().

Configuración de ajuste (snap) del Editor:

  • Tamaño de cuadrícula = 1 / assetsPPU en todos los ejes (ej. PPU 16 → 0.0625, PPU 100 → 0.01)
  • Ajuste de cuadrícula habilitado en la superposición de Cuadrícula y Ajuste
  • Para ajustar GameObjects existentes: selecciónalos → Alinear Seleccionados → Todos los Ejes

Configuración de cámara:

  • Proyección de cámara = Ortográfica
  • Componente Pixel Perfect Camera presente y del tipo correcto para el pipeline
  • allowHDR, allowMSAA, allowDynamicResolution todos en false
  • La vista de Escena muestra dos cuadros delimitadores verdes en el gizmo de la cámara — sólido = área visible, punteado = resolución de referencia

→ Código: references/camera-setup-urp.cs — configuración completa de cámara URP + PP Camera. → Código: references/camera-setup-builtin.cs — configuración independiente Built-in.

Configuración de calidad del proyecto:

  • Anti-Aliasing = 0 en Configuración de Calidad
  • Filtrado Anisotrópico = Desactivado

Referencia de API

Tablas completas de propiedades/métodos, valores de enumeración GridSnapping y CropFrame, y configuraciones recomendadas: → references/api-reference.md — léelo al escribir o revisar código de configuración de cámara.

Resumen rápido de enumeraciones:

GridSnapping: None · PixelSnapping (estándar) · UpscaleRenderTexture (baja resolución auténtica; incompatible con post-procesado y texto UI)

CropFrame: None · Pillarbox · Letterbox · Windowbox (valor predeterminado más seguro) · StretchFill


Resolución de Referencia

Elige antes de construir cualquier activo. Nunca cambies después de que comience la producción de activos.

Resolución de referencia1080p1440p4K
320 × 1806×8×12×
480 × 2704×~5.3×8×
640 × 3603×4×6×

320×180 es la opción general más segura. Para pantallas sin ajuste entero (ej. 1366×768), usa cropFrame = Windowbox para agregar barras negras en lugar de estirar a una escala fraccionaria.


Migración y Compatibilidad

Proyecto URP con el componente independiente Built-in

Síntoma: DetectPipeline() devuelve URP pero la cámara tiene UnityEngine.U2D.PixelPerfectCamera. Los síntomas son sutiles porque el componente independiente tiene código condicional ENABLE_URP.

Corrección:

  1. Elimina com.unity.2d.pixel-perfect del Administrador de Paquetes
  2. Elimina UnityEngine.U2D.PixelPerfectCamera de cada cámara
  3. Agrega UnityEngine.Rendering.Universal.PixelPerfectCamera
  4. Reconfigura — los booleanos (pixelSnapping, upscaleRT, cropFrameX/Y) se convierten en enumeraciones (gridSnapping, cropFrame)

→ Código de detección: references/pipeline-detection.cs (al final del archivo).

Espacio de nombres URP antiguo (pre-Unity 2022 / URP pre-13.x)

Síntoma: Errores de compilación que referencian UnityEngine.Experimental.Rendering.Universal.

Corrección: Reemplaza using UnityEngine.Experimental.Rendering.Universal; con using UnityEngine.Rendering.Universal;. Actualiza cualquier cadena de tipo calificado por ensamblado. El atributo [MovedFrom] maneja la serialización automáticamente — los componentes en GameObjects sobreviven a la actualización.


Problemas Comunes y Soluciones

Sprites borrosos

Corrección: Configura Filter Mode en Point en todos los sprites del ámbito, desactiva Mip Maps, desactiva AA en Configuración de Calidad. → Código: references/sprite-settings.cs

Espacios entre tiles del Tilemap

Trabaja en orden: las soluciones alternativas como espacio negativo entre celdas o PPU = 31.99 se rompen cuando la cámara se mueve.

#VerificaciónCorrección
1¿Sprite Atlas con Tight Packing desactivado, Padding ≥ 4, Sprite Packer Mode habilitado?Habilita Sprite Packer Mode en la configuración del Editor; en el atlas, establece Padding ≥ 4 y desactiva Tight Packing
2¿Mipmaps desactivados en las texturas del tileset y el atlas?Desactiva Generate Mip Maps
3¿AA = 0, MSAA desactivado en la cámara?Desactiva AA globalmente
4¿Compresión = Ninguna?RGBA 32 bits sin comprimir
5¿Todos los sprites de tiles tienen dimensiones de píxeles pares?Las dimensiones impares causan un desplazamiento de cuadrícula de 0.5px
6¿PPU = ancho de píxel del tile? (16×16 → PPU 16)La falta de coincidencia de PPU deja espacios físicos
7¿Solo espacios durante el movimiento de la cámara después de pasar todo lo anterior?Usa pixel snapping de PP Camera; no uses cellGap = -0.01f

Conflicto con Cinemachine

Causa: Tanto Cinemachine como Pixel Perfect Camera escriben en el tamaño ortográfico cada fotograma.

Corrección: Agrega la extensión CinemachinePixelPerfect a través del menú desplegable Agregar Extensión en cada Cámara Virtual. No lo agregues mediante AddComponent en código.

Limitaciones conocidas:

  • Las transiciones de cámara entre cámaras virtuales no son perfectas en píxeles durante las transiciones
  • UpscaleRenderTexture reduce los tamaños ortográficos perfectos en píxeles válidos, lo que puede desviar el encuadre
  • Target Group + Framing Transposer causa entrecortamiento visible (no hay corrección disponible)

Desenfoque de post-procesado con upscaleRT

Causa: El post-procesado se ejecuta después de que la PP Camera escala la textura de renderizado.

Corrección simple: Desactiva upscaleRT. El post-procesado entonces se ejecuta en la resolución nativa de la pantalla.

Corrección avanzada (Unity 6 URP): Inyecta un ScriptableRendererFeature2D en RenderPassEvent2D.AfterRenderingPostProcessing. Usa clases base específicas para 2D — ScriptableRendererFeature (clase base 3D) se ignora silenciosamente en un renderizador 2D de URP.

Texto UI borroso con upscaleRT

Estado: Limitación conocida de U

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

unity-technologies/audio-setup-mixers

Scans the scene and audio assets to appropriately route Audio Sources into existing Audio Mixer Groups, classifying each source by what it plays. Use when the user asks about cleaning up mixer assignments, routing audio through a mixer, or which group a sound belongs in. Creating mixers and groups, and setting volumes, are not automated — the skill inventories what exists and asks the user to add anything missing.

unity-technologies/build-live-game

Build and operate a live game using Unity Services. Use when the user needs to implement, connect, or debug backend-driven features — battle passes, achievements, player progression, cloud saves, leaderboards, matchmaking, virtual economies, server-authoritative logic, anti-cheat, player accounts and authentication, remote configuration, feature flags, A/B testing, analytics, or cloud resource deployment. Triggers on live-ops, live service, backend, server authority, cloud code, cloud save, remote config, player data, retention, monetization loop, season pass, ranking, multiplayer sessions, lobbies, or any Unity Services integration.

unity-technologies/generate-editor-search-query

Generates Unity Search / Quick Search queries and opens the Unity Search window for read-only Unity Editor asset or scene-object lookup requests. Always use when the user asks to find, search, show, locate, filter, look up, query, or list concrete assets or scene objects in the current project or scene, even if Unity Search is not named. Covers materials, textures, prefabs, scenes, scripts, shaders, GameObjects, components, Lights, Cameras, UI objects, labels, paths, references, selected or named assets, and asset types. Also use when the user explicitly mentions Unity Search, Quick Search, Search window, open Search, or asks what Unity Search query to use. Do not use for general project overview, project structure, folder-purpose summaries, gameplay/system explanations, how-to programming questions, web search, repository text search, build logs, package installation, menu or settings search, modifying results, or non-Unity filesystem search unless the user explicitly asks to use Unity Search.

unity-technologies/implement-in-app-purchases

Implement, configure, and debug Unity In-App Purchases (IAP) — store connection, product catalog, consumable/non-consumable/subscription purchases, two-step pending-confirm flow, receipt validation, entitlement checking, restore transactions, Apple extensions (promotional purchases, Ask-to-Buy, code redemption), and Google Play extensions (subscription upgrade/downgrade), D2C Capabilities(direct to customer), 3rd party payment provider (Stripe/Coda) via Unity IAP/Unity Cloud. Use when the user needs to add, modify, debug, or migrate from native Android/iOS billing, 3rd party packages(RevenueCat/Adapty/Essential Kit/Unipay supported) to IAP. Triggers on microtransactions (MTX), monetization, real-money purchases, store purchases, buying items, support D2C, purchase via Stripe/Coda, migrate from native billing(Google's BillingClient or Apple's StoreKit/SKPaymentQueue/SKProduct)/RevenueCat/Adapty/EssentialKit/Unipay.

unity-technologies/initialize-ai-navigation

Sets up and configures the Unity AI Navigation system — NavMesh surfaces, NavMesh agents, obstacles, links, modifiers, areas and costs. Use when creating walkable navigation meshes, adding pathfinding agents, setting up patrol routes, configuring obstacle avoidance and carving, connecting separate NavMeshes with links, coupling navigation with animation, or troubleshooting navigation issues.

unity-technologies/levelplay-unity-integration

Integrates the LevelPlay Mediation SDK via the Ads Mediation UPM package. Use when a developer asks about adding ads to a Unity game, implementing rewarded, interstitial, or banner ads, setting up ad mediation, configuring ad networks, installing or updating the Ads Mediation package, troubleshooting LevelPlay namespace errors, resolving Android gradle or iOS CocoaPods dependency issues for ads, configuring ATT or privacy settings for ad compliance, tracking impression-level revenue (ILRD), initializing the LevelPlay SDK, or setting up ad unit IDs. Also use when a developer wants to monetize their Unity game with ads, asks how to get started with LevelPlay, ads, or mediation, or needs help with any part of the LevelPlay integration workflow including platform-specific setup for iOS or Android. Also use when upgrading the LevelPlay or IronSource SDK version, migrating from deprecated IronSource.Agent APIs, or migrating a game from Unity Ads to LevelPlay.

unity-technologies/localization

Sets up and configures Unity Localization, including locales, String/Asset Tables, CJK font support, and Addressables workflows. Use when the user wants to add languages to a project, translate UI text, support Asian (CJK) languages with TMP fonts, or mentions i18n, l10n, multilingual support, or making a game support multiple languages.

unity-technologies/manage-sprite-atlas

Manage SpriteAtlas using prebuild pipeline with IPreprocessBuildWithReport (DEFAULT approach). Use it to configure master atlases, variant atlases, texture settings, packing settings, and platform-specific configurations. Use when the user asks about creating sprite atlases, optimizing sprites, configuring atlas settings, adding sprites to atlases, creating variant atlases, implementing automated atlas generation, or runtime sprite atlas access. Always use prebuild approach unless user explicitly requests manual authoring.

unity-technologies/migrate-birp-to-urp

Plans, executes, and troubleshoots Unity projects moving from the Built-in Render Pipeline (BiRP/BIRP/Built-in RP) to the Universal Render Pipeline (URP). Use when the user asks to upgrade, convert, switch, or migrate a project, scene, material, or shader to URP/Universal Render Pipeline; fix pink or magenta materials after URP; convert Built-in materials/shaders; move a 2D project to URP 2D; review lighting, quality, post-processing, baked lightmaps, or reflection probes after URP; or diagnose visual problems after a render-pipeline migration.

Skills relacionados