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。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 中,`SpriteRenderer` 是用于渲染 2D 精灵(Sprite)的组件。它可以将指定的 Sprite 显示在场景中,并支持一些常见的渲染设置,比如颜色、透明度、层级等。 `SpriteRenderer` 组件可以在 Unity 的编辑器中通过 `Add Component` 菜单添加到游戏对象上。要使用 `SpriteRenderer` 渲染精灵,需要将 Sprite 赋值给其 `sprite` 属性。 以下是 `SpriteRenderer` 常见的属性: - `sprite`:要渲染的精灵。 - `color`:精灵的颜色。 - `flipX` 和 `flipY`:精灵是否水平/垂直翻转。 - `sortingLayerName` 和 `sortingOrder`:精灵的层级和排序。 - `material`:精灵使用的材质。 `SpriteRenderer` 组件还可以通过设置 `Sorting Layer` 和 `Order in Layer` 属性来控制精灵的层级和排序。可以在 `Edit` -> `Project Settings` -> `Tags and Layers` 中添加自定义的 Sorting Layer。 例如,以下代码可以在场景中创建一个渲染指定 Sprite 的精灵: ```csharp using UnityEngine; public class SpriteRendererDemo : MonoBehaviour { public Sprite spriteToRender; void Start() { // 创建一个新的游戏对象 GameObject spriteObject = new GameObject("Sprite"); // 添加 SpriteRenderer 组件 SpriteRenderer renderer = spriteObject.AddComponent<SpriteRenderer>(); // 设置要渲染的精灵 renderer.sprite = spriteToRender; // 设置精灵的颜色 renderer.color = Color.white; // 设置精灵的层级和排序 renderer.sortingLayerName = "Foreground"; renderer.sortingOrder = 0; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值