本文给出了一些有用的解释,即使在4.3发布之前也是如此:
如果您要寻找“像素艺术”外观,那么相机的正交尺寸至关重要。这是在Unity中钉2D的最棘手的部分。
正字大小表示相机投影的上半部分包含多少个世界单位。例如,如果将正交大小设置为5,则视口的垂直范围将恰好包含10个单位的世界空间。(水平范围取决于显示纵横比。)
回想一下,子画面四边形是1个单位。这意味着正射大小会告诉您可以在视口中垂直堆叠的精灵数量(除以2)。
为了使像素艺术外观清晰呈现,您需要确保子图形源纹理的每个像素都以1:1比例映射到视口显示。您不希望源像素被跳过或加倍,否则您的精灵看起来会失真并且“肮脏”。确保此1:1比例的技巧是设置与您的垂直屏幕分辨率相匹配的正交大小除以精灵的像素高度。
假设您的运行速度为960x640,并且您使用的是64x64子画面。将垂直屏幕分辨率(640)除以子画面(64)的像素高度可得到10,即可以垂直堆叠为640像素的64x64子画面的数量。请记住,正字法的大小是高度的一半,因此在这种情况下,目标正字法的大小将为5(十分之一)。它看起来应该像这样:
如果将正交大小设置为该目标的一半或两倍,则可能仍会得到可用的结果,因为精灵的垂直大小仍将均匀地划分为视口的垂直大小。但是,如果您不正确地设置正交大小,则会看到一些像素被跳过或加倍,并且看起来确实很糟糕:
可变分辨率
您无需局限于单一的固定分辨率即可呈现清晰的像素图。处理可变分辨率的最简单方法是将自定义脚本附加到相机,该脚本将根据当前垂直分辨率和已知(固定)子画面大小设置正射影像大小:
// 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子画面在640x480处比在1920x1200处占据更多的视在空间。这是否有问题取决于您特定游戏的需求。
如果您希望精灵不考虑屏幕分辨率而保持相同的外观大小,则只需将正射大小设置为固定值,然后将其保留在此处,而不管屏幕分辨率如何。缺点是您的精灵将不再具有1:1的源对屏幕像素比。您可以通过只允许使用恰好是目标分辨率的一半或两倍的分辨率来减轻这种不良影响。
(增加了一些重点)
如果高度分辨率可以被精灵大小整除,这显然会更好,但是即使不是,也仍然可以很好地近似体面的结果。
TL; DR:cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;