Skip to content

RawImage ​

image-20260710143936220image-20260710143826626

这张图展示的是 Unity UGUI 中的 Raw Image(原始图像)组件。它与 Image 最大的区别是:Raw Image 直接显示 Texture,特别适合小地图、摄像机画面、视频和网络图片。

Unity_UI_RawImage_Inspector_Expanded_Guide

一、截图当前状态 ​

从截图可以读出:

  • 对象名称:RawImage
  • Layer:UI
  • 锚点位于父对象中心
  • Position:0, 0, 0
  • 尺寸:512 × 256,宽高比为 2:1
  • Texture:None,目前没有指定纹理
  • Color:白色,不改变纹理原色
  • Raycast Target:关闭,不会阻挡后方按钮
  • Maskable:开启,可以接受父级遮罩
  • UV Rect:X=0、Y=0、W=1、H=1,表示显示完整纹理

二、Rect Transform ​

Rect Transform 决定 Raw Image 在 Canvas 中的位置和大小。

  • Position X/Y/Z:相对于锚点的位置。
  • Width/Height:控件显示区域的宽度和高度。
  • Anchor Min/Max:对象跟随父级的参考位置。截图中都是 0.5,表示固定在父级中心。
  • Pivot:对象自身的旋转、缩放和尺寸变化中心。0.5, 0.5 表示正中心。
  • Rotation:UI 的旋转角度。
  • Scale:额外缩放比例,通常保持 1,1,1。

如果纹理不是 2:1,放进当前 512 × 256 的矩形后可能被拉伸。可调整宽高,或者添加 Aspect Ratio Fitter 保持原始比例。

三、Canvas Renderer ​

这是负责把 UI 顶点、材质和纹理提交给 Canvas 的底层渲染组件,通常不需要手动操作。

Cull Transparent Mesh 表示:当 UI 所有顶点的 Alpha 接近零时,可以忽略这块几何体,减少完全透明对象的无效绘制,通常保持勾选即可。Unity CanvasRenderer API

四、Raw Image 字段 ​

字段用法
Texture指定要显示的纹理,可接受 Texture2D、RenderTexture、WebCamTexture 等
Color与纹理颜色相乘;白色保留原色,Alpha 控制透明度
Material指定自定义 UI 材质,用于灰度、圆角、模糊等效果
Raycast Target是否参与鼠标或触摸的 UI 点击检测
Raycast Padding调整 Raw Image 四周的点击判定区域
Maskable是否允许被父级 Mask 或 Rect Mask 2D 裁剪
UV Rect控制显示纹理的哪个区域

截图底部的 Default UI Material 是 Unity 默认 UI 材质,使用 UI/Default Shader。一般不要直接修改它;需要特殊效果时,应新建一个 Material,再赋给上方的 Material 字段。

五、UV Rect 详解 ​

UV 坐标的原点位于纹理左下角:

  • X/Y:从纹理什么位置开始取样。
  • W/H:取样区域的宽度和高度。
  • 修改 UV 不会改变 Rect Transform 的大小。

常用配置:

X=0,    Y=0,    W=1,   H=1    显示整张纹理
X=0,    Y=0,    W=0.5, H=1    显示左半边
X=0.5,  Y=0,    W=0.5, H=1    显示右半边
X=0.25, Y=0.25, W=0.5, H=0.5  显示中心区域

当纹理的 Wrap Mode 设置为 Repeat 时,让 W/H 大于 1 可以平铺纹理;持续改变 X/Y 可以制作流动背景。Unity Raw Image 手册

六、典型使用流程 ​

  • 小地图:Camera → RenderTexture → Raw Image
  • 角色模型预览:预览相机 → RenderTexture → Raw Image
  • 视频:VideoPlayer → RenderTexture → Raw Image
  • 摄像头:WebCamTexture → Raw Image
  • 网络图片:下载得到 Texture2D → Raw Image

运行时赋值示例:

using UnityEngine;
using UnityEngine.UI;

public class RawImageDemo : MonoBehaviour
{
    [SerializeField] private RawImage preview;
    [SerializeField] private Texture picture;

    private void Start()
    {
        preview.texture = picture;
        preview.uvRect = new Rect(0, 0, 1, 1);
        preview.raycastTarget = false;
    }
}

preview.SetNativeSize() 可以把 Rect Transform 调整为纹理原始像素尺寸,但高分辨率图片可能因此变得非常大。

七、Raw Image 与 Image ​

  • 普通按钮、图标、面板、九宫格背景、血条:优先使用 Image。
  • 视频、摄像机输出、小地图、网络图片、动态纹理:使用 Raw Image。
  • Image 支持 Simple、Sliced、Tiled、Filled。
  • Raw Image 没有这些类型,但可以直接接受各种 Texture,并通过 UV Rect 控制取样区域。

Unity API 文档也提醒,大量 Raw Image,尤其使用不同纹理时,可能增加 Draw Call,因此不适合无节制地用于大量普通图标。Unity RawImage API

常问:Raw Image 与 Image 的区别? ​

一句话概括:

Image 用来显示 Sprite,适合常规 UI;Raw Image 用来显示 Texture,适合动态画面。

Unity_UI_RawImage_vs_Image

对比项ImageRaw Image
资源字段Source ImageTexture
接受类型SpriteTexture2D、RenderTexture、WebCamTexture 等
图片导入设置通常设为 Sprite (2D and UI)可以直接使用普通 Texture
显示类型Simple、Sliced、Tiled、Filled没有这些类型
特有功能九宫格、平铺、进度填充、保持比例UV Rect 裁剪、缩放、滚动纹理
常用场景按钮、图标、面板、血条、技能图标小地图、视频、摄像头、模型预览、网络图片
图集支持Sprite 可以放进 Sprite Atlas不使用 Sprite Atlas
批处理同材质、同图集时更容易合批使用不同纹理时更容易增加 Draw Call

Image 适合普通界面

Image 专门围绕 Sprite 设计,最大的优势是支持多种显示模式:

  • Simple:普通显示图片。
  • Sliced:九宫格拉伸,保护四角和边框。
  • Tiled:重复平铺 Sprite。
  • Filled:水平、垂直或径向填充,常用于血条和技能冷却。
  • Preserve Aspect:保持 Sprite 原始宽高比。
  • Set Native Size:将控件调整为 Sprite 原始尺寸。
c
[SerializeField] private Image icon;
[SerializeField] private Sprite iconSprite;

private void Start()
{
    icon.sprite = iconSprite;
}

Raw Image 适合动态纹理

Raw Image 可以直接显示 Texture,不需要先转换为 Sprite:

  • Camera 输出的 RenderTexture
  • VideoPlayer 播放画面
  • WebCamTexture 摄像头画面
  • 运行时下载得到的 Texture2D
  • 小地图、监控画面和角色模型预览
c
[SerializeField] private RawImage preview;
[SerializeField] private RenderTexture renderTexture;

private void Start()
{
    preview.texture = renderTexture;
}

UV Rect 是 Raw Image 的重点:

c
X=0, Y=0, W=1, H=1       显示整张纹理
X=0, Y=0, W=0.5, H=1     显示左半边
X=0.5, Y=0, W=0.5, H=1   显示右半边

如果网络下载的是 Texture2D:

rawImage.texture = downloadedTexture;

如果必须放进 Image,则需要额外创建 Sprite:

c
image.sprite = Sprite.Create(
    downloadedTexture,
    new Rect(0, 0, downloadedTexture.width, downloadedTexture.height),
    new Vector2(0.5f, 0.5f)
);

两者都有 Rect Transform、Color、Material、Raycast Target 和 Maskable。选择时记住:

  • 界面美术资源、按钮、九宫格、血条:用 Image。
  • Camera、视频、摄像头、网络 Texture:用 Raw Image。

参考:Unity Raw Image 手册。SVG 已完成预览检查,没有文字重叠或越框。

八、常见问题 ​

  • 看不到内容:检查 Texture 是否为 None、Color Alpha 是否为 0、对象是否启用、是否被父级遮罩裁掉。
  • 图片被拉伸:让 Rect 宽高比匹配纹理,或者添加 Aspect Ratio Fitter。
  • 后面的按钮点不到:关闭装饰性 Raw Image 的 Raycast Target。
  • 点击仍然无效:检查 Canvas 是否有 Graphic Raycaster,场景中是否有 EventSystem。
  • 自定义材质无法被遮罩:Shader 可能没有正确支持 UI Stencil 或裁剪。
  • UV 平铺无效:检查纹理的 Wrap Mode 是否为 Repeat。

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0