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——数值越大显示越小,数值越小显示越大。
发表评论