Unity 2D peut-il être utilisé pour créer des jeux pixel-art?

16

Je regarde les nouvelles fonctionnalités 2D introduites dans Unity 4.3, et je pense que je manque peut-être quelque chose.

Pour moi, il semble qu'ils soient conçus pour les jeux 2D haute résolution, où la mise à l'échelle des sprites est correcte, mais elle ne convient pas aux jeux pixel-art.

Un sprite pixel-art est conçu pour s'afficher exactement 1: 1 pixels sur l'écran: la mise à l'échelle le détruit (la mise à l'échelle linéaire est une exception, c'est-à-dire que vous pouvez la mettre à l'échelle 2x, 3x, 4x, etc.).

Cependant, je n'ai trouvé aucun moyen de "simplement l'afficher tel quel", apparemment Unity insiste pour le mettre à l'échelle à la résolution qu'il juge appropriée: je peux contrôler le paramètre Camera.size et le paramètre "pixels en unités" du sprite , mais je n'ai pas réussi à obtenir ce résultat.

o0 '.
la source
1
Si je ne me trompe pas, le jeu "Organ Trail" a été entièrement réalisé sur Unity3d, avant 4.3.
felipe

Réponses:

19

Cet article donne quelques explications utiles, même si c'est avant la sortie de 4.3:

Si vous optez pour le «pixel art», la taille orthographique de la caméra est d'une importance critique; c'est la partie la plus délicate du clouage 2D dans Unity.

La taille orthographique exprime le nombre d'unités mondiales contenues dans la moitié supérieure de la projection de la caméra. Par exemple, si vous définissez une taille orthographique de 5, les étendues verticales de la fenêtre contiennent exactement 10 unités d'espace mondial. (Les étendues horizontales dépendent du rapport d'aspect de l'affichage.)

Rappelez-vous que votre quad sprite est d'une unité sur un côté. Cela signifie que la taille orthographique vous indique le nombre de sprites que vous pouvez empiler verticalement dans la fenêtre (divisé par 2).

Pour rendre le pixel-art net, vous devez vous assurer que chaque pixel de la texture source du sprite correspond 1: 1 à la fenêtre d'affichage. Vous ne voulez pas que les pixels sources soient ignorés ou doublés, ou vos sprites auront l'air déformés et «sales». L'astuce pour garantir ce rapport 1: 1 consiste à définir une taille orthographique qui correspond à votre résolution d'écran verticale divisée par la hauteur en pixels d'un sprite.

Disons que vous utilisez 960x640 et que vous utilisez des sprites 64x64. En divisant la résolution d'écran verticale (640) par la hauteur en pixels d'un sprite (64), on obtient 10, le nombre de sprites 64x64 qui peuvent être empilés verticalement en 640 pixels. N'oubliez pas que la taille orthographique est une demi-hauteur, donc votre taille orthographique cible dans ce cas sera de 5 (la moitié de 10). Ça devrait ressembler à ça:

Si vous définissez votre taille orthographique sur la moitié ou le double de cette cible, vous pouvez toujours obtenir des résultats utilisables, car la taille verticale de l'image-objet se divisera toujours également en taille verticale de la fenêtre. Mais si vous définissez la taille orthographique de manière incorrecte, vous verrez certains pixels sautés ou doublés, et cela aura l'air très mauvais en effet:

Résolution variable

Vous n'avez pas besoin d'être confiné à une seule résolution fixe pour rendre un pixel art net. La façon la plus simple de gérer des résolutions variables consiste à attacher un script personnalisé à votre caméra qui définit la taille orthographique en fonction de la résolution verticale actuelle et d'une taille connue (fixe) de sprite :

// set the camera to the correct orthographic size
// (so scene pixels are 1:1)
s_baseOrthographicSize = Screen.height / 64.0f / 2.0f;
Camera.main.orthographicSize = s_baseOrthographicSize;

Bien qu'il s'agisse d'une solution simple, elle présente un inconvénient: à mesure que la résolution de l'écran diminue, vous verrez de moins en moins de monde, et les sprites occuperont de plus en plus de l'écran. C'est la conséquence du maintien d'un rapport 1: 1 entre la source et les pixels de l'écran: un sprite 64x64 prend plus d'espace apparent à 640x480 qu'à 1920x1200. Que ce soit un problème ou non dépend des besoins de votre jeu spécifique.

Si vous souhaitez que vos sprites restent à la même taille apparente quelle que soit la résolution de l'écran, définissez simplement la taille orthographique sur une valeur fixe et laissez-la là quelle que soit la résolution de l'écran. L'inconvénient est que vos sprites n'auront plus un rapport de pixel source: 1: 1. Vous pouvez atténuer les effets néfastes de cela en n'autorisant que des résolutions qui sont exactement la moitié ou exactement le double de votre résolution cible.

(un peu d'accent ajouté)

Cela fonctionne évidemment mieux si la résolution de la hauteur est divisible par la taille du sprite, mais même lorsqu'elle ne l'est pas, elle donne toujours une bonne approximation d'un résultat décent.


TL; DR :cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;

o0 '.
la source
5
Une autre chose utile est de définir le filtrage de texture sur «Point».
felipe
@Felipe bon point: j'ai oublié cela parce que je l'ai déjà compris.
o0 '.