Communitygithub.com

unity-technologies/2d-pixel-perfect

Configure, diagnostiquer et corriger le rendu pixel perfect 2D dans les projets Unity. À utiliser lorsque vous travaillez sur un jeu rétro ou en pixel art 2D.

Qu'est-ce que 2d-pixel-perfect ?

Cette compétence permet de configurer, diagnostiquer et résoudre les problèmes de rendu pixel perfect 2D dans Unity. Elle gère les deux implémentations distinctes et incompatibles (URP et Built-in) en détectant d'abord le pipeline de rendu, puis en appliquant les composants et paramètres appropriés. La compétence couvre la détection de pipeline, la configuration de la caméra, les paramètres d'importation des sprites (filtre Point, PPU, compression), les réglages de snapping dans l'éditeur, la désactivation de l'anti-aliasing, et la résolution des problèmes courants comme les sprites flous, les espaces dans les tilemaps, les conflits avec Cinemachine, et les effets de post-processing incompatibles avec l'upscaleRT. Elle fournit également des conseils sur la migration entre les versions URP et les espaces de noms, ainsi que des recommandations sur les résolutions de référence pour le pixel art.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Configurer, diagnostiquer et corriger le rendu pixel perfect 2D dans les projets Unity.


⚠️ Il existe deux implémentations complètement séparées

Le rendu pixel perfect dans Unity n'est pas un système unique — il s'agit de deux implémentations distinctes et incompatibles, une par pipeline de rendu. Détectez toujours le pipeline avant d'écrire ou de diagnostiquer du code.

URPBuilt-in
ComposantUnityEngine.Rendering.Universal.PixelPerfectCameraUnityEngine.U2D.PixelPerfectCamera
PackageIntégré dans URP — pas d'installation supplémentairecom.unity.2d.pixel-perfect v6.0.0+
Style d'APIÉnumérations (gridSnapping, cropFrame)Booléens (pixelSnapping, upscaleRT, cropFrameX/Y)

N'installez pas com.unity.2d.pixel-perfect dans un projet URP.

→ Appelez toujours DetectPipeline() en premier (references/pipeline-detection.cs), puis branchez votre configuration, vos diagnostics et vos correctifs en fonction du résultat.


Quand NE PAS utiliser cette compétence

  • Jeux HD 2D ou haute résolution 2D — le pixel snapping et le filtrage ponctuel rendront l'art lisse incorrect
  • Scènes d'interface utilisateur uniquement — utilisez plutôt Canvas Scaler
  • Projets HDRP — Pixel Perfect Camera n'est pas pris en charge

Rappels critiques

⚠️ Détectez d'abord le pipeline de rendu — URP et Built-in utilisent des composants Pixel Perfect Camera différents qui ne sont pas interchangeables. ⚠️ Le mode de filtre = Point est le correctif n°1 — le filtrage bilinéaire est la valeur par défaut d'Unity et est presque toujours la cause des sprites flous. ⚠️ L'anti-aliasing doit être désactivé — dans les paramètres de qualité et sur la caméra. L'AA brouille activement les bords des pixels.

Principes clés

1. Détection du pipeline et sélection du composant de caméra

Voir le tableau de comparaison des deux chemins en haut de ce fichier. Note sur le nom de l'assembly : le package autonome Built-in s'installe dans un dossier Runtime/, mais le champ "name" de l'asmdef est Unity.2D.PixelPerfect — pas de suffixe Runtime. HDRP n'est pas pris en charge — voir la section de repli HDRP sous Problèmes courants.

→ Code : references/pipeline-detection.cs — DetectPipeline(), GetPixelPerfectCameraType(), et vérification des écarts de migration.

2. Approche axée sur le diagnostic en premier

Diagnostiquez toujours avant d'apporter des modifications. Rapportez les résultats, puis corrigez uniquement ce qui est cassé.

3. Travaillez dans le bon scope

Par défaut, travaillez au niveau de la scène. Analysez à l'échelle du projet uniquement si l'utilisateur le demande explicitement.


Liste de contrôle de diagnostic

Paramètres d'importation des sprites :

  • Mode de filtre = Point (sans filtre) sur tous les sprites concernés
  • Mip Maps = désactivés
  • Compression = Aucune / Non compressé
  • PPU cohérent sur tous les sprites de la scène
  • Pivots des sprites réglés sur Personnalisé / mode Pixels — un pivot central sur un sprite de dimensions impaires (par exemple 15×15) atterrit à 7,5 px, provoquant un décalage de 0,5 px

→ Code : references/sprite-settings.cs — GetImporter() et FixSpriteImportSettings().

Paramètres de snapping de l'éditeur :

  • Taille de la grille = 1 / assetsPPU sur tous les axes (par exemple PPU 16 → 0,0625, PPU 100 → 0,01)
  • Snapping de grille activé dans la superposition Grille et Snap
  • Pour accrocher les GameObjects existants : sélectionnez-les → Aligner la sélection → Tous les axes

Configuration de la caméra :

  • Projection de la caméra = Orthographique
  • Composant Pixel Perfect Camera présent et type correct pour le pipeline
  • allowHDR, allowMSAA, allowDynamicResolution tous false
  • La vue Scène montre deux boîtes englobantes vertes sur le gizmo de la caméra — plein = zone visible, pointillé = résolution de référence

→ Code : references/camera-setup-urp.cs — configuration complète de la caméra URP + PP Camera. → Code : references/camera-setup-builtin.cs — configuration autonome Built-in.

Paramètres de qualité du projet :

  • Anti-Aliasing = 0 dans les paramètres de qualité
  • Filtrage anisotrope = Désactivé

Référence API

Tableaux complets des propriétés/méthodes, valeurs des énumérations GridSnapping et CropFrame, et configurations recommandées : → references/api-reference.md — à lire lors de l'écriture ou de la révision du code de configuration de la caméra.

Résumé rapide des énumérations :

GridSnapping : None · PixelSnapping (standard) · UpscaleRenderTexture (basse résolution authentique ; incompatible avec le post-processing et le texte UI)

CropFrame : None · Pillarbox · Letterbox · Windowbox (valeur par défaut la plus sûre) · StretchFill


Résolution de référence

Choisissez avant de construire des assets. Ne changez jamais après le début de la production des assets.

Résolution de référence1080p1440p4K
320 × 1806×8×12×
480 × 2704×~5,3×8×
640 × 3603×4×6×

320×180 est le choix général le plus sûr. Pour les écrans sans ajustement entier (par exemple 1366×768), utilisez cropFrame = Windowbox pour ajouter des barres noires plutôt que d'étirer à une échelle fractionnaire.


Migration et compatibilité

Projet URP avec le composant autonome Built-in

Symptôme : DetectPipeline() renvoie URP mais la caméra a UnityEngine.U2D.PixelPerfectCamera. Les symptômes sont subtils car le composant autonome a du code conditionnel ENABLE_URP.

Correctif :

  1. Supprimez com.unity.2d.pixel-perfect du gestionnaire de packages
  2. Supprimez UnityEngine.U2D.PixelPerfectCamera de chaque caméra
  3. Ajoutez UnityEngine.Rendering.Universal.PixelPerfectCamera
  4. Reconfigurez — les booléens (pixelSnapping, upscaleRT, cropFrameX/Y) deviennent des énumérations (gridSnapping, cropFrame)

→ Code de détection : references/pipeline-detection.cs (bas du fichier).

Ancien espace de noms URP (avant Unity 2022 / URP avant 13.x)

Symptôme : Erreurs de compilation référençant UnityEngine.Experimental.Rendering.Universal.

Correctif : Remplacez using UnityEngine.Experimental.Rendering.Universal; par using UnityEngine.Rendering.Universal;. Mettez à jour toutes les chaînes de type qualifiées par assembly. L'attribut [MovedFrom] gère la sérialisation automatiquement — les composants sur les GameObjects survivent à la mise à niveau.


Problèmes courants et solutions

Sprites flous

Correctif : Réglez le mode de filtre sur Point sur tous les sprites concernés, désactivez les Mip Maps, désactivez l'AA dans les paramètres de qualité. → Code : references/sprite-settings.cs

Espaces dans les tilemaps entre les tuiles

Travaillez dans l'ordre — les solutions de contournement comme l'espace négatif entre les cellules ou PPU = 31,99 se cassent lorsque la caméra bouge.

#VérificationCorrectif
1Sprite Atlas avec Tight Packing désactivé, Padding ≥ 4, mode Sprite Packer activé ?Activez le mode Sprite Packer dans les paramètres de l'éditeur ; sur l'atlas, définissez Padding ≥ 4 et désactivez Tight Packing
2Mipmaps désactivés sur les textures de tileset et l'atlas ?Désactivez Générer les Mip Maps
3AA = 0, MSAA désactivé sur la caméra ?Désactivez AA globalement
4Compression = Aucune ?RGBA 32 bits non compressé
5Toutes les tuiles de sprite ont des dimensions de pixels paires ?Les dimensions impaires provoquent un décalage de grille de 0,5 px
6PPU = largeur en pixels de la tuile ? (16×16 → PPU 16)Un décalage de PPU laisse des espaces physiques
7Espaces uniquement pendant le mouvement de la caméra après toutes les vérifications ci-dessus ?Utilisez le pixel snapping de la PP Camera ; n'utilisez pas cellGap = -0.01f

Conflit avec Cinemachine

Cause : Cinemachine et la Pixel Perfect Camera écrivent toutes deux dans la taille orthographique à chaque image.

Correctif : Ajoutez l'extension CinemachinePixelPerfect via le menu déroulant Ajouter une extension sur chaque caméra virtuelle. Ne l'ajoutez pas via AddComponent dans le code.

Limitations connues :

  • Les transitions de caméra entre caméras virtuelles ne sont pas pixel perfect pendant les transitions
  • UpscaleRenderTexture réduit les tailles orthographiques pixel perfect valides, ce qui peut faire dévier le cadrage
  • Target Group + Framing Transposer provoque un saccade visible (aucun correctif disponible)

Flou du post-processing avec upscaleRT

Cause : Le post-processing s'exécute après que la PP Camera a augmenté la résolution de la texture de rendu.

Correctif simple : Désactivez upscaleRT. Le post-processing s'exécute alors à la résolution native de l'écran.

Correctif avancé (Unity 6 URP) : Injectez un ScriptableRendererFeature2D à RenderPassEvent2D.AfterRenderingPostProcessing. Utilisez des classes de base spécifiques à la 2D — ScriptableRendererFeature (classe de base 3D) est ignoré silencieusement dans un rendu 2D URP.

Texte UI flou avec upscaleRT

Statut : Problème connu d'Unity. Utilisez un Canvas Scaler avec mise à l'échelle constante (Constant Pixel Size) ou désactivez upscaleRT. Envisagez d'utiliser TextMeshPro avec des polices bitmap pour les jeux pixel art.

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 associés