Communitygithub.com

unity-technologies/2d-pixel-perfect

Configura, diagnostica e corrige a renderização 2D pixel-perfect em projetos Unity. Use ao trabalhar em qualquer jogo 2D retrô ou pixel art.

O que é 2d-pixel-perfect?

Este skill configura, diagnostica e corrige a renderização 2D pixel-perfect em projetos Unity, essencial para jogos 2D retrô ou pixel art. Ele lida com duas implementações separadas e incompatíveis: URP (Pipeline Universal) e Built-in (padrão). O skill sempre detecta o pipeline de renderização primeiro (via `DetectPipeline()`), e então aplica a configuração correta da câmera (PixelPerfectCamera) e as configurações de importação de sprites (Filtro Point, sem Mip Maps, sem compressão). A abordagem é baseada em diagnóstico antes de qualquer alteração, evitando erros comuns como sprites borrados, lacunas em tilemaps, conflitos com Cinemachine e problemas com pós-processamento ao usar upscaleRT. O skill é compatível com as plataformas Claude Code, Cursor, Codex e outras ferramentas de IA para desenvolvimento, e contém referências de código e checagens de qualidade para garantir uma configuração precisa.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Configure, diagnostique e corrija a renderização 2D pixel-perfect em projetos Unity.


⚠️ Existem Duas Implementações Completamente Separadas

A renderização pixel-perfect no Unity não é um sistema único — são duas implementações separadas e incompatíveis, uma por pipeline de renderização. Sempre detecte o pipeline antes de escrever ou diagnosticar qualquer código.

URPBuilt-in
ComponenteUnityEngine.Rendering.Universal.PixelPerfectCameraUnityEngine.U2D.PixelPerfectCamera
PacoteIntegrado ao URP — sem instalação extracom.unity.2d.pixel-perfect v6.0.0+
Estilo da APIEnums (gridSnapping, cropFrame)Booleans (pixelSnapping, upscaleRT, cropFrameX/Y)

Não instale com.unity.2d.pixel-perfect em um projeto URP.

→ Sempre chame DetectPipeline() primeiro (references/pipeline-detection.cs), depois ramifique sua configuração, diagnósticos e correções com base no resultado.


Quando NÃO usar este skill

  • Jogos 2D HD ou de alta resolução — o pixel snapping e o filtro Point deixarão a arte suave com aparência errada
  • Cenas apenas de UI — use o Canvas Scaler
  • Projetos HDRP — o Pixel Perfect Camera não é suportado

Lembretes Críticos

⚠️ Detecte o pipeline de renderização primeiro — URP e Built-in usam componentes Pixel Perfect Camera diferentes que não são intercambiáveis. ⚠️ Modo de Filtro = Point é a correção #1 — a filtragem bilinear é o padrão do Unity e quase sempre é a causa de sprites borrados. ⚠️ O Anti-Aliasing deve estar desabilitado — nas Configurações de Qualidade e na câmera. O AA borra ativamente as bordas dos pixels.

Princípios Chave

1. Detecção de Pipeline e Seleção do Componente da Câmera

Veja a tabela de comparação dos dois caminhos no topo deste arquivo. Nota sobre o nome do assembly: o pacote standalone Built-in instala em uma pasta Runtime/, mas o campo "name" do asmdef é Unity.2D.PixelPerfect — sem o sufixo Runtime. HDRP não é suportado — veja a seção de fallback HDRP em Problemas Comuns.

→ Código: references/pipeline-detection.cs — DetectPipeline(), GetPixelPerfectCameraType() e verificação de incompatibilidade de migração.

2. Abordagem de Diagnóstico Primeiro

Sempre diagnostique antes de fazer alterações. Relate os resultados e corrija apenas o que está quebrado.

3. Trabalhe no escopo correto

Use o escopo da cena como padrão. Varra o projeto inteiro apenas quando o usuário solicitar explicitamente.


Checklist de Diagnóstico

Configurações de importação de sprites:

  • Modo de Filtro = Point (sem filtro) em todos os sprites do escopo
  • Mip Maps = desabilitado
  • Compressão = Nenhum / Descomprimido
  • PPU consistente em todos os sprites da cena
  • Pivôs dos sprites definidos como Personalizado / Modo Pixels — um pivô central em um sprite de dimensão ímpar (ex.: 15×15) cai em 7.5px, causando desalinhamento de 0.5px

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

Configurações de snap do editor:

  • Tamanho da Grade = 1 / assetsPPU em todos os eixos (ex.: PPU 16 → 0.0625, PPU 100 → 0.01)
  • Snap da Grade habilitado na sobreposição Grade e Snap
  • Para alinhar GameObjects existentes: selecione-os → Alinhar Selecionados → Todos os Eixos

Configuração da câmera:

  • Projeção da câmera = Ortográfica
  • Componente Pixel Perfect Camera presente e do tipo correto para o pipeline
  • allowHDR, allowMSAA, allowDynamicResolution todos false
  • A visualização da cena mostra duas caixas delimitadoras verdes no gizmo da câmera — sólida = área visível, pontilhada = resolução de referência

→ Código: references/camera-setup-urp.cs — configuração completa da câmera URP + PP Camera. → Código: references/camera-setup-builtin.cs — configuração standalone Built-in.

Configurações de qualidade do projeto:

  • Anti-Aliasing = 0 nas Configurações de Qualidade
  • Filtragem Anisotrópica = Desabilitada

Referência da API

Tabelas completas de propriedades/métodos, valores de enum GridSnapping e CropFrame, e configurações recomendadas: → references/api-reference.md — leia ao escrever ou revisar código de configuração de câmera.

Resumo rápido dos enums:

GridSnapping: None · PixelSnapping (padrão) · UpscaleRenderTexture (baixa resolução autêntica; incompatível com pós-processamento e texto de UI)

CropFrame: None · Pillarbox · Letterbox · Windowbox (padrão mais seguro) · StretchFill


Resolução de Referência

Escolha antes de construir qualquer asset. Nunca mude depois que a produção de assets começar.

Resolução de referência1080p1440p4K
320 × 1806×8×12×
480 × 2704×~5.3×8×
640 × 3603×4×6×

320×180 é a escolha geral mais segura. Para telas sem ajuste inteiro (ex.: 1366×768), use cropFrame = Windowbox para adicionar barras pretas em vez de esticar para uma escala fracionária.


Migração e Compatibilidade

Projeto URP com o componente standalone Built-in

Sintoma: DetectPipeline() retorna URP, mas a câmera tem UnityEngine.U2D.PixelPerfectCamera. Os sintomas são sutis porque o componente standalone tem código condicional ENABLE_URP.

Correção:

  1. Remova com.unity.2d.pixel-perfect do Gerenciador de Pacotes
  2. Remova UnityEngine.U2D.PixelPerfectCamera de cada câmera
  3. Adicione UnityEngine.Rendering.Universal.PixelPerfectCamera
  4. Reconfigure — booleans (pixelSnapping, upscaleRT, cropFrameX/Y) se tornam enums (gridSnapping, cropFrame)

→ Código de detecção: references/pipeline-detection.cs (final do arquivo).

Namespace URP antigo (pré-Unity 2022 / URP pré-13.x)

Sintoma: Erros de compilação referenciando UnityEngine.Experimental.Rendering.Universal.

Correção: Substitua using UnityEngine.Experimental.Rendering.Universal; por using UnityEngine.Rendering.Universal;. Atualize quaisquer strings de tipo qualificadas por assembly. O atributo [MovedFrom] lida com a serialização automaticamente — componentes em GameObjects sobrevivem à atualização.


Problemas e Soluções Comuns

Sprites borrados

Correção: Defina o Modo de Filtro como Point em todos os sprites do escopo, desabilite Mip Maps e desabilite AA nas Configurações de Qualidade. → Código: references/sprite-settings.cs

Lacunas entre tiles no Tilemap

Trabalhe em ordem — soluções alternativas como lacuna de célula negativa ou PPU = 31.99 quebram quando a câmera se move.

#VerificaçãoCorreção
1Sprite Atlas com Tight Packing desligado, Padding ≥ 4, Sprite Packer Mode habilitado?Habilite o Sprite Packer Mode nas configurações do Editor; no atlas, defina Padding ≥ 4 e desligue Tight Packing
2Mipmaps desabilitados nas texturas do tileset e no atlas?Desabilite Generate Mip Maps
3AA = 0, MSAA desligado na câmera?Desabilite AA globalmente
4Compressão = Nenhum?RGBA 32-bit descomprimido
5Todos os sprites de tile têm dimensões de pixels pares?Dimensões ímpares causam desalinhamento de grade de 0.5px
6PPU = largura de pixel do tile? (16×16 → PPU 16)Incompatibilidade de PPU deixa lacunas físicas
7Lacunas apenas durante o movimento da câmera após todos os passos acima?Use pixel snapping da PP Camera; não use cellGap = -0.01f

Conflito com Cinemachine

Causa: Tanto o Cinemachine quanto o Pixel Perfect Camera escrevem no tamanho ortográfico a cada quadro.

Correção: Adicione a extensão CinemachinePixelPerfect através do menu Adicionar Extensão em cada Câmera Virtual. Não a adicione via AddComponent em código.

Limitações conhecidas:

  • As transições de câmera entre câmeras virtuais não são pixel-perfect durante as transições
  • UpscaleRenderTexture reduz os tamanhos ortográficos pixel-perfect válidos, o que pode fazer o enquadramento desviar
  • Target Group + Framing Transposer causa oscilação visível (sem correção disponível)

Borrão de pós-processamento com upscaleRT

Causa: O pós-processamento executa após a PP Camera aumentar a textura de renderização.

Correção simples: Desabilite upscaleRT. O pós-processamento então executa na resolução nativa da tela.

Correção avançada (Unity 6 URP): Injete um ScriptableRendererFeature2D em RenderPassEvent2D.AfterRenderingPostProcessing. Use classes base específicas para 2D — ScriptableRendererFeature (classe base 3D) é silenciosamente ignorada em um renderizador 2D URP.

Texto de UI borrado com upscaleRT

Status: Conhecido no 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.

Habilidades Relacionadas