学习在于折腾之Unity的sprite和image

本文详细解析了Unity中Sprite与Image组件的区别,尤其是在2D游戏开发中的应用。介绍了如何通过Sprite组件实现场景中的图片操作,以及如何利用Image组件在UI界面中替换图片,特别提到了使用Image.overrideSprite进行Sprite替换的技巧。

 

今天在测试某一些功能的时候,明白了一些sprite和image的区别,以及苦恼了一阵子的关于图片替换的问题。

在Unity中,将图片直接拖入Scene界面中,Unity会自动给予图片一个Sprite组件,将它默认为精灵(我的理解是用作2D的图片,不过似乎3D中也可用,暂时不明。)

当有了sprite组件,位置就以transform而不是Rect transfrom,这时候是以游戏界面而不是UI(canvas),所以此时想要替换图片,是以transform操作,但如果要在UI界面中实现,则将其图片先绑定到一个image上面,然后变成Prefab,这时再去生成该图片,就在是Canvas下面。

 


从官方的UI界面中发现了一个非常好用的替换Sprite的方法。Image.overrideSprite,重载Sprite。

### UnitySprite Image 组件的区别 #### 渲染方式差异 Sprite 使用 `SpriteRenderer` 组件进行渲染,该组件适用于世界空间中的对象。相比之下,Image 则依赖于 UGUI 的 `Image` `CanvasRenderer` 组件,在屏幕空间内呈现[^1]。 #### 坐标系不同 对于 Sprite 而言,默认情况下采用的是 Transform 组件定义的世界坐标;而 Image 属于 UI 类别,因此使用 RectTransform 来管理位置与尺寸,遵循 UI 坐标体系[^2]。 #### 尺寸调整机制 当涉及到大小调节时,Sprite 可以通过变换矩阵 (Scale) 或者设置 Draw Mode 为 Sliced 并指定宽度高度来进行操作。然而,针对 Image,则既能够利用 Scale 进行缩放,也能借助 RectTransform 修改宽高属性,并且不具备类似的 Draw Mode 设置项。 #### 特殊功能对比 - **翻转效果**:仅支持旋转角度达到 180 度的方式实现图像反转; - **蒙版应用**:原生 Mask 功能专供 Image 使用,直到 Unity 2017 才引入了专门面向 Sprites 的 Sprite Mask 支持。 #### 图集兼容性 由精灵编辑器切分所得的图集可以直接作用于 Sprite 上,但对于 Image 却不适用这种优化措施[^3]。 #### 场景适配能力 考虑到 Mesh 不会依据界面布局自动变形的特点以及 Z 轴可调特性,使得 Sprite 更适合处理涉及复杂交互或动态变化较多的内容,比如粒子系统、角色动画等。而在纯 UI 设计方面,由于 Order In Layer 参数的存在便于管理排列多个视觉元素之间的前后次序,故 Image 成为了首选方案之一。 ```csharp // 创建并配置一个简单的 Sprite 对象 GameObject spriteObject = new GameObject(); spriteObject.AddComponent<SpriteRenderer>(); spriteObject.transform.localScale = Vector3.one * 2f; // 构建带有 Image 组件的游戏对象实例 RectTransform rectTransform = Instantiate(Resources.Load<RectTransform>("Prefabs/UIElement")); rectTransform.SetParent(canvasRectTransform); var imageComponent = rectTransform.GetComponent<Image>(); imageComponent.rectTransform.sizeDelta = new Vector2(100, 50); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值