GameObject在场景的位置Position,并没有明确是什么具体单位——如:Transform的x、y、z,或RectTransform的PosX、PosY、PosZ。而RectTransform在面板上显示的Width和Height,也没有具体单位,其实并不是像素。
事实上,通过3ds Max的模型导入Unity,会发现Unity的默认单位是米,也就是一个场景中的unit都是以米为具体单位。
这就涉及到一个问题,即如何按照比例显示像素?或说如何显示2D图片的大小?(3D的图片是以纹理形式蒙皮在模型上的,尺寸距离以模型的顶点为基准)
Texture
那么,在Texture导入的时候,如果是Sprite(2D and UI)就会有一个设置,即PixelsToUnits——也就是多少像素为一个Unity的单位unit,或说1米。
如图显示,默认是100个像素为1米,也就是100个像素,对应面板上的xyz / Pos.xyz / Width / Height的1——更大数值图片更小,更小数值图片更大,这是Sprite Renderer的情况。
例如,一个图片1024x1024,PixelsToUnits是100,则这个图片在场景中的width与height就是10.24——会显得很小;如果PixelsToUnits是1,则width与height就正好是1024——会显得很大。
Image
在Image中,可以设置一个Sprite,这时是将Sprite塞入Image的容器中,所以Sprite越大像素密度越大,则显示越小(被压缩了),Sprite越小像素密度越小(被拉伸了),则显示越大——这是Sliced Type情况。
但如果是Tiled Type,则是Sprite平铺在Image里面,所以Sprite越大,则只能铺一部分(显示不全),Sprite越小,则可以铺很多块(显示很多个小的Sprite)。
Canvas Scaler
这个Canvas Scaler组件,可以缩放整个画布,那么画布之上的像素也会受其影响,有两个设置,即:DynamicPixelsPerUnit与ReferencePixelsPerUnit——前者缩放Text(TextMeshPro不受影响),后者缩放Sprite——数值越大显示越小,数值越小显示越大。