Saludos a todos.
Un amigo y yo estamos desarrollando un juego para dispositivos moviles en unity (actualemtne en la version 5.5.0f3)
y tenemos un problema con el pixel art que nos esta volviendo locos.
Tenemos un sprite atlas a x4 de resolucion. La cosa es que no se ve bien en la mayoria de dispositivos (pixeles muy distorsionados).
Para intentar solucionarlo estudiamos como implementar el pixel perfect. Todo bien pero resulta que nuestro juego tiene un escenario
estatico, el cual siempre debe verse en pantalla (algo asi como leep day y sus paredes horizontales) y somos incapazes de resolverlo, ya que
al ajustar el ortographic size de la camara para intentar que quepa todo , al no ser el tamaño Heigth/2 * ppu) se deforma todo.
Espero que podais orientarme bien par ael pixel perfect, o bien para que los sprites se vean lo mejor posible.
Gracias de antemano y un saludo.
Buenas,
¿habéis probado a importar las texturas con el Filter Mode en Point? Para gráficos Pixel Art a veces es una buena solución.
Un saludo.
Si, ya que sin ese Filter mode el pixel perfect es inviable XD
Bueno hay casos en los que a veces es mejor usar bilinear, como por ejemplo cuando la distancia ortográfica está muy alejada.
Hay un post en el blog que explica algunos consejos pero supongo que ya lo habrás visto también:
https://blogs.unity3d.com/es/2015/06/19/pixel-perfect-2d/ (https://blogs.unity3d.com/es/2015/06/19/pixel-perfect-2d/)
Nunca entendi muy bien el pixelPerfect, osea, es cuando tu camara se mueve un estilo snap to grid, pero de acuerdo a un pixel no? que depende del orthographicSize y resolusion supongo.
A mi me pasaba que se veian raro,los tiles cuando les puse un material sprite-difuso, aveces se corrian de muy poquito con el movimiento de la camara y se via el fondo, lo arregle con la opcion pixelperfect del material, creo. Nada que ver con tu problema claro.
Te pasa algo como el de este video?
https://www.youtube.com/watch?v=yI8JrBNTwkc (//%5Byoutube%5Dhttps://www.youtube.com/watch?v=yI8JrBNTwkc%5B/youtube%5D)
Hola, antes de nada gracias por responderme.
Si, nos pasa como ese vídeo. Nosotros usamos sprite renderer de componente, quizás si lo pusiéramos como textura se arreglaría?
Si usamos bilinear se nos ve mal. he visto tu ejemplo OldGuy, en el paso uno define nuestro problema, pero no se si lo llega a solucionar. Lo estudiare mas a fondo e iré informando.
Gracias de nuevo y un saludo.
Hola buenas. Siento al tardanza, he estado liado con temas de trabajo y tal.
He ojeado el ejemplo, pero le ocurre lo mismo y no pone como solucionarlo. Es decir, para determinados tamaños o proporciones de pantalla y el escenario se descoloca, ya sea ampliando el vació por las bandas laterales, etc...
Me e replanteado lo del pixel perfect, ya que, viendo otros ejemplos, no se puede ajustar para que siempre se vea una proporción determinada del escenario, ya que si le asignas un tamaño al ortographic size que no le corresponde siempre se va a ver mal....
En fin, no se que hacer XD. Alguien sabe algún consejo para que los pixeles se vean medianamente bien sin recurrir al pixel perfect?
Gracias de antemano y un saludo.
Os paso el codigo que yo uso, lo tengo de hace tiempo, no es mio pero es free igualmente, a mi me funciona perfectamente.
(Lo que hace es ajustar el size a la relacion X e Y de la resolucion de pantalla) Nombre del archivo:
PixelPerfect.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
//PixelPerfect Camera in Unity
//from Marrt
public enum SnapMode {SnapToScreenPixel, SnapToArtPixel};
public class PixelPerfect : MonoBehaviour {
public static PixelPerfect instance; //make sure only one instance of this script exists
public Camera cam;
public Transform camAnchor;
public Transform followTarget;
public SnapMode snapMode = SnapMode.SnapToArtPixel;
private float orthoSize;
public float pxPerUnit = 100F; //Esto lo cambias segun el pixel per Unit de tus texturas/sprites
private float subPixelFactor = 2F;
private bool pixelSnapOn = true;
private float snap = 0F;
void Awake(){
instance = this;
Zoom (1F);
}
void Update(){
if(Input.GetKey(KeyCode.LeftControl))
{
if(Input.GetKeyDown(KeyCode.F1)){Zoom(0.5F);}
if(Input.GetKeyDown(KeyCode.F2)){Zoom(1F);}
if(Input.GetKeyDown(KeyCode.F3)){Zoom(2F);}
if(Input.GetKeyDown(KeyCode.F4)){Zoom(3F);}
if(Input.GetKeyDown(KeyCode.F5)){Zoom(4F);}
}
}
void LateUpdate(){