Unity SpriteRenderer API Sprite的大小,宽度,高度 以及bounds.size属性的详解

当spriteRenderer的rendermode设置为sliced时,可以通过SpriteRenderer.size来获取大小

当然,还有一种是可以无视RenderMode,直接访问和获取大小的,就是SpriteRenderer.bounds.size

这个bounds属性里面有好多东西,有center(中心点位置),size , min, max ,extends(具体怎么解释,我也不好说,是一个vector3的量,大概等于|min|+|max|除以2)

 

假如我现在倒入一张512*512的图片。设置它的pixels per unit为100。在transform.localscale =(1,1,1)的时候,那么这个gameobject的renderer.bounds.size属性中,x和y都是5.12。

现在我将transform.localscale =(1,1,1)改为(2,2,2),这个时候renderer.bounds.size中的x和y变成的10.24。

也就是说transform组件会影响renderer。同时初始的sprite设置:pixels per unit也会 影响renderer。

 

这里提一下,这次我制作游戏的过程中出现了父子物体的scale变化问题。(其实一直都有,但是原先没有引起我重视)

只有两层,父物体localscale = (0.5,0.5,0.5)  子物体localscale =(2,2,2),如果我将子物体从父物体拿出来,放到根节点,那么子物体的localscale会变成(1,1,1)。

这个可以这样子来计算,我理解为每一个物体有一个绝对scale。这里简称为absscale。

一个子物体的absscale = 父物体的localscale * 子物体的localscale 。

子物体从父物体移除或移入,其absscale不会改变,但是其localscale会因为上面的公式,在进行父对象变换时,自己的localscale根据父对象的localscale进行改变。

 

这个问题就涉及到instantiate这个方法的使用了。

正常的一个父物体A=(0.5,0.5,0.5)    子物体B(1,1,1)  

如果我是使用instantiate(B,A)  //实例化子物体B,同时指定B的父物体是A。

这时子物体B的localscale仍是(1,1,1),但是我发现B物体的absscale变了,现在是(0.5,0.5,0.5,)

但是我将实例化物体这一过程分成两部

首先Gameobject go = Instantiate(B);

然后go.transform.parent = A;

这样子物体B的localscale会变成(2,2,2) ,  这样子就没有改变他的absscale。

你可能感兴趣的:(Unity)