Unity 2D có thể được sử dụng để tạo các trò chơi pixel-art không?


16

Tôi đang xem các tính năng 2D mới được giới thiệu trong Unity 4.3 và tôi nghĩ rằng tôi có thể đang thiếu một cái gì đó.

Đối với tôi có vẻ như chúng được thiết kế cho các trò chơi 2D có độ phân giải cao, trong đó việc chia tỷ lệ các họa tiết là ổn, nhưng nó không phù hợp với các trò chơi pixel-art.

Một sprite nghệ thuật pixel được thiết kế để hiển thị chính xác 1: 1 pixel trên màn hình: chia tỷ lệ sẽ phá hủy nó (tăng tỷ lệ tuyến tính là một ngoại lệ, tức là bạn có thể chia tỷ lệ 2x, 3x, 4x, v.v.).

Tuy nhiên, tôi không tìm thấy cách nào để "chỉ hiển thị như hiện tại", rõ ràng Unity khăng khăng mở rộng nó thành bất kỳ độ phân giải nào mà nó thấy phù hợp: Tôi có thể điều khiển tham số Camera.size và tham số "pixel to units" của sprite , nhưng tôi đã không quản lý để có được kết quả này.


1
Nếu tôi không sai, trò chơi "Organ Trail" đã được thực hiện hoàn toàn trên Unity3d, trước 4.3.
felipe

Câu trả lời:


19

Bài viết này cung cấp một số giải thích hữu ích, ngay cả khi đó trước 4.3 xuất hiện:

Nếu bạn đang tìm kiếm nghệ thuật pixel pixel, thì kích thước chỉnh hình của máy ảnh là rất quan trọng; đây là phần khó nhất trong việc đóng đinh 2D trong Unity.

Kích thước chính tả biểu thị có bao nhiêu đơn vị thế giới được chứa trong nửa trên của máy chiếu. Ví dụ: nếu bạn đặt kích thước hình học là 5, thì phạm vi dọc của chế độ xem sẽ chứa chính xác 10 đơn vị không gian thế giới. (Các phạm vi ngang phụ thuộc vào tỷ lệ khung hình hiển thị.)

Hãy nhớ lại rằng quad sprite của bạn là 1 đơn vị cho một bên. Điều đó có nghĩa là kích thước chính tả cho bạn biết có bao nhiêu họa tiết bạn có thể xếp theo chiều dọc trong chế độ xem (chia cho 2).

Để hiển thị pixel-art trông rõ ràng, bạn cần đảm bảo rằng mỗi pixel của kết cấu nguồn của sprite ánh xạ 1: 1 vào màn hình chế độ xem. Bạn không muốn các pixel nguồn bị bỏ qua hoặc nhân đôi, hoặc các họa tiết của bạn sẽ bị biến dạng và bẩn bẩn. Mẹo để đảm bảo tỷ lệ 1: 1 này là đặt kích thước hình học phù hợp với độ phân giải màn hình dọc của bạn chia cho chiều cao pixel của một sprite.

Giả sử bạn đang chạy ở tốc độ 960x640 và bạn đang sử dụng các họa tiết 64x64. Chia độ phân giải màn hình dọc (640) cho chiều cao pixel của sprite (64) mang lại 10, số lượng sprite 64x64 có thể được xếp theo chiều dọc trong 640 pixel. Hãy nhớ rằng kích thước chính tả là một nửa chiều cao, vì vậy kích thước chỉnh hình mục tiêu của bạn trong trường hợp này sẽ là 5 (một nửa của 10). Nó sẽ giống như thế này:

Nếu bạn đặt kích thước hình chính tả của mình thành một nửa hoặc gấp đôi mục tiêu đó, bạn vẫn có thể nhận được kết quả có thể sử dụng được, bởi vì kích thước dọc của sprite vẫn sẽ chia đều cho kích thước dọc của khung nhìn. Nhưng nếu bạn đặt kích thước chính xác không chính xác, bạn sẽ thấy một số pixel bị bỏ qua hoặc nhân đôi và nó sẽ trông rất tệ:

Độ phân giải biến

Bạn không cần phải giới hạn ở một độ phân giải cố định duy nhất để hiển thị nghệ thuật pixel sạch. Cách đơn giản nhất để xử lý độ phân giải biến là đính kèm tập lệnh tùy chỉnh vào máy ảnh của bạn, đặt kích thước chính tả theo độ phân giải dọc hiện tại và kích thước sprite đã biết (cố định) :

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

Mặc dù đó là một sửa chữa đơn giản, nhưng nó có một nhược điểm: khi độ phân giải màn hình giảm, bạn sẽ thấy ngày càng ít hơn trên thế giới và các họa tiết sẽ chiếm ngày càng nhiều màn hình. Đó là kết quả của việc giữ tỷ lệ 1: 1 giữa các pixel nguồn và màn hình: một sprite 64x64 chiếm không gian rõ ràng hơn ở 640x480 so với 1920x1200. Đây có phải là một vấn đề hay không phụ thuộc vào nhu cầu của trò chơi cụ thể của bạn.

Nếu bạn muốn các họa tiết của bạn giữ nguyên kích thước rõ ràng bất kể độ phân giải màn hình, thì chỉ cần đặt kích thước chính tả thành một giá trị cố định và để nó ở đó bất kể độ phân giải màn hình. Hạn chế là các họa tiết của bạn sẽ không còn có tỷ lệ pixel trên màn hình 1: 1. Bạn có thể giảm thiểu các tác động xấu của điều đó bằng cách chỉ cho phép các độ phân giải chính xác gấp rưỡi hoặc gấp đôi độ phân giải mục tiêu của bạn.

(một số nhấn mạnh được thêm vào)

Điều này rõ ràng hoạt động tốt hơn nếu độ phân giải chiều cao chia hết cho kích thước sprite, nhưng ngay cả khi không, nó vẫn cho kết quả gần đúng với kết quả tốt.


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


5
Một điều hữu ích khác là đặt lọc kết cấu thành 'Điểm'.
felipe

@Felipe điểm tốt: Tôi quên điều đó vì tôi đã tìm ra rồi.
o0 '.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.