Unity 2D를 사용하여 픽셀 아트 게임을 만들 수 있습니까?


16

Unity 4.3에 도입 된 새로운 2D 기능을보고 있는데 뭔가 빠진 것 같습니다.

나에게는 그것이 스프라이트의 스케일링이 괜찮은 고해상도 2D 게임을 위해 설계된 것처럼 보이지만 픽셀 아트 게임에는 적합하지 않습니다.

픽셀 아트 스프라이트는 화면에 정확히 1 : 1 픽셀로 표시되도록 설계되었습니다. 스케일링은이를 파괴합니다 (선형 업 스케일링은 예외입니다. 즉, 2x, 3x, 4x 등으로 스케일링 할 수 있음).

그러나 나는 "그냥 그대로 그대로"표시 할 방법을 찾지 못했다. Unity는 분명히 원하는 해상도로 스케일을 조정해야한다고 주장한다. 스프라이트의 Camera.size 파라미터와 "pixels to units"파라미터를 제어 할 수있다 하지만이 결과를 얻지 못했습니다.


1
내가 틀리지 않으면 "Organ Trail"게임은 4.3 이전에 Unity3d에서 완전히 이루어졌습니다.
felipe

답변:


19

이 기사 는 4.3이 나오기 전에도 유용한 설명을 제공합니다.

“픽셀 아트”모양을 원한다면 카메라의 직교 크기가 매우 중요합니다. 이것이 Unity에서 2D 네일 링의 가장 까다로운 부분입니다.

직교 크기는 카메라 투영 상반부에 포함 된 월드 단위 수를 나타냅니다. 예를 들어, 직교 크기를 5로 설정하면 뷰포트의 수직 범위에는 정확히 10 단위의 월드 공간이 포함됩니다. 가로 범위는 디스플레이 종횡비에 따라 다릅니다.

스프라이트 쿼드는 1 단위입니다. 즉, 직교 크기는 뷰포트에 세로로 쌓을 수있는 스프라이트 수를 2로 나눈 값을 나타냅니다.

픽셀 아트를 깨끗하게 보이게하려면 스프라이트 소스 텍스처의 각 픽셀이 뷰포트 디스플레이에 1 : 1로 매핑되어야합니다. 소스 픽셀을 건너 뛰거나 두 배로 늘리기를 원하지 않으면 스프라이트가 왜곡되어 "더러워"보입니다. 이 1 : 1 비율을 보장하는 요령은 수직 화면 해상도를 스프라이트의 픽셀 높이로 나눈 정사영 크기를 설정하는 것입니다.

960x640에서 실행 중이고 64x64 스프라이트를 사용한다고 가정 해 봅시다. 수직 화면 해상도 (640)를 스프라이트 (64)의 픽셀 높이로 나누면 640 픽셀에 수직으로 쌓을 수있는 64x64 스프라이트의 수가 10이됩니다. 직교 크기는 반 높이이므로이 경우 대상 직교 크기는 5 (1/2)입니다. 다음과 같아야합니다.

직교 크기를 해당 대상의 절반 또는 두 배로 설정하면 스프라이트의 세로 크기가 여전히 뷰포트의 세로 크기로 균등하게 분할되므로 사용 가능한 결과를 얻을 수 있습니다. 그러나 직교 크기를 잘못 설정하면 일부 픽셀이 건너 뛰거나 두 배가되며 실제로 매우 나빠 보일 것입니다.

가변 해상도

깨끗한 픽셀 아트를 렌더링하기 위해 고정 된 단일 해상도로 제한 할 필요는 없습니다. 가변 해상도를 처리하는 가장 간단한 방법은 현재 수직 해상도 및 알려진 (고정 된) 스프라이트 크기에 따라 직교 크기를 설정하는 사용자 지정 스크립트를 카메라에 연결하는 것입니다 .

// 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;

이것은 간단한 수정이지만 단점이 있습니다. 화면 해상도가 낮아짐에 따라 화면이 점점 작아지고 스프라이트가 점점 더 많은 화면을 차지하게됩니다. 이는 소스와 화면 픽셀 사이에 1 : 1 비율을 유지 한 결과입니다. 64x64 스프라이트는 1920x1200보다 640x480에서 더 분명한 공간을 차지합니다. 이것이 문제인지 아닌지는 특정 게임의 요구에 달려 있습니다.

스프라이트가 화면 해상도에 관계없이 동일한 겉보기 크기를 유지하려면 직교 크기를 고정 값으로 설정하고 화면 해상도에 관계없이 그대로 두십시오. 단점은 스프라이트에 더 이상 1 : 1 소스-스크린 픽셀 비율이 없다는 것입니다. 대상 해상도의 정확히 절반 또는 정확히 두 배인 해상도 만 허용하면 그로 인한 악영향을 완화 할 수 있습니다.

(일부 강조 추가)

높이 해상도를 스프라이트 크기로 나눌 수 있으면 분명히 더 잘 작동하지만 그렇지 않은 경우에도 여전히 적절한 결과를 얻을 수 있습니다.


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


5
또 다른 유용한 것은 텍스처 필터링을 'Point'로 설정하는 것입니다.
felipe

@Felipe 좋은 지적 : 나는 이미 그것을 이해했기 때문에 그것에 대해 잊었다.
o0 '.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.