当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。