1 纹理(Texture)

​ Image 控件和 RawImage 控件都是承载渲染图片的控件,都需要指定一个纹理(Texture)图片。在 Assets 窗口选中一张图片,在 Inspector 窗口的参数设置面板可以查看和编辑图片属性。图片属性中最重要的是图片类型(Texture Type),有 Default、Normal map、Editor GUI and Legacy GUI、Sprite(2D and UI)、Coursor、Cookie、Lightmap、Single Channel 8 种类型,其中最常用的是 Default 和 Sprite 2 种类型,以下是这 2 种类型图片的参数设置面板。

​ 当给图片设置精灵(Sprite)类型时,可以点击【Sprite Editor】按钮编辑图片的边框,以解决图片边界变形问题:图片在横向拉伸时,左右两边的边边界不会拉伸;图片纵向拉伸时,上下两边的边界不会拉伸;无论水平还是纵向拉伸,四个角的边界始终不变形。

2 Image 控件

1)面板属性

​ Image 控件只能添加精灵(Sprite)类型图片, 面板属性如下:

2)Image Type

​ Image Type 有 Simple、Sliced、Tiled、Filled 4 种类型,对应面板属性如下:

  • Simple:图片适配控件大小自由拉伸,勾选 Preserve Aspect 保持图片宽高比不变,Set Native Size 设置控件宽高为图片原始宽高;
  • Sliced:图片适配控件大小自由拉伸,需要设置边界,4 个角的边界始终不变形,取消 Fill Center 只绘制边界;
  • Tiled:当控件比较大、图片比较小时,图片从下往上、从左往右重复平铺,铺满整个控件空间;
  • Filled:只显示图片的一部分,可以用于技能 CD,Set Native Size 设置控件宽高为图片原始宽高。

​ 重复平铺:

​ 绘制部分:

3)遮掩(Mask)

​ 可以给 Image 控件添加 Mask 组件,以控制子控件的显示区域,如:创建一个 Image 控件,改名为 MaskImage,将 Source Image 设置为一个圆形的图片(已修改为 Sprite 类型),并为其添加 Mask 组件;在 MaskImage 下创建 Image 子控件,将 Source Image 设置为一个正方形的 Sprite 图片。控件层级、Mask 组件、原图如下:

​ 显示效果如下:

​ 注意: MaskImage 中的圆形图片,必须是 png 格式的,并且圆形外面无像素(不是白色或黑色)。

3 RawImage 控件

​ RayImage 对图片类型没有要求,但是没有 Image Type 属性,面板属性如下:

4 应用

​ 本节将通过技能 CD 的案例,展示 Image 控件的应用。

1)创建 UI

​ 创建 3 个 Image 控件,分别重命名为 Circle、Skill、White,并给 Circle 添加 Mask 组件,再创建一个 Text 控件,这些控件的宽高都是 300,控件层级结构如下:

​ Circle、Skill、White 对应的图片如下:

​ 将 White 控件的 Image Type 设置为 Filled,Fill Origin 设置为 Top,取消 Clockwise 选项,如下:

2)脚本组件

​ SkillCD.cs

using UnityEngine;
using UnityEngine.UI; public class SkillCD : MonoBehaviour {
private Image skillWhiteImage;
private Text skillWaitText;
private bool hasReleaseSkill = false;
private float skillInterval = 2; // 技能冷却时间
private float skillWaitTime = 0; // 释放技能后等待时间 private void Start () {
skillWhiteImage = transform.Find("White").GetComponent<Image>();
skillWaitText = transform.Find("Text").GetComponent<Text>();
skillWhiteImage.fillAmount = 0;
} private void Update () {
skillWaitTime += Time.deltaTime;
if (!hasReleaseSkill && Input.GetMouseButtonDown(0)) {
releaseSkill();
}
waitSkill();
} private void releaseSkill() { // 释放技能
skillWhiteImage.fillAmount = 1;
skillWaitText.text = skillInterval.ToString("0.0");
hasReleaseSkill = true;
skillWaitTime = 0;
} private void waitSkill() { // 等待技能点亮
if (hasReleaseSkill) {
float resTime = skillInterval - skillWaitTime;
skillWhiteImage.fillAmount = resTime / skillInterval;
skillWaitText.text = resTime.ToString("0.0");
if (skillWaitTime > skillInterval) {
hasReleaseSkill = false;
skillWaitText.text = "";
}
}
}
}

3)运行效果

​ 声明:本文转自【Unity3D】UGUI之Image和RawImage

【Unity3D】UGUI之Image和RawImage的更多相关文章

  1. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  2. Unity3D UGUI之ScrollView弹簧效果

    unity3d版本5.3.2p4 UGUI中ScrollView包含Viewport(Content) ScrollView包含脚本.其Movement Type一共3个选项.Elastic就是弹簧效 ...

  3. Unity3D UGUI下拉菜单/Dropdown组件用法、总结

    Unity3D中UGUI实现下拉菜单 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  4. Unity3d uGUI适配

    Cavas: 1.Render Model设置为:Screen Space- Camera.如果想在UI前面加特效我可以在创建一个摄像机(UIForward)深度大于这个UICamera就行了. 2. ...

  5. Unity3D UGUI学习系列索引(暂未完成)

    U3D UGUI学习1 - 层级环境 U3D UGUI学习2 - Canvas U3D UGUI学习3 - RectTransform U3D UGUI学习4 - Text U3D UGUI学习5 - ...

  6. Unity3D UGUI窗口拖拽

    在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...

  7. Unity3D UGUI强制刷新Layout(布局)组件

    UGUI的Layout布局组件确实节省了我们很多代码 如果不使用Layout组件 那么光在计算UI的布局上就要花费很大的功夫 特别是动态生成其组件的时候 当然,Layout组件在大多数时候是非常好用的 ...

  8. Unity3D UGUI实现Toast

    项目中有些信息需要以Toast的形式体现出来,不需要交互,弹出后一段时间后消失,多个Toast会向上重叠,下面是一个UGUI Toast的实现,动画部份用到了Dotween来实现 首先需要制作Toas ...

  9. Unity3D — — UGUI之简易背包

    Uinity版本:2017.3 最近在学Siki老师的<黑暗之光RPG>教程,由于教程内用的是NGUI实现,而笔者本人用的是UGUI,所以在这里稍微写一下自己的实现思路(大致上和NGUI一 ...

  10. Unity3d — — UGUI之Box Collider自适应大小

    NGUI下给Sprite/image添加collider后能自适应大小,但是在UGUI下Collider是默认在(0,0)位置,size为0 因此写了个简单的脚本,效果如下(最后附代码) 1.如下图添 ...

随机推荐

  1. kind-微k8s-测试与开发

    0. kind 简介 开发与测试场景: 通过docker容器来模拟k8s节点 Github:https://github.com/kubernetes-sigs/kind 1. Kind 安装 os: ...

  2. 使用Python+FFMPEG实现视频分割与合并

    前言 日常中偶尔会遇到需要简单剪辑处理视频的场景,以前我可能会拿出PR来剪辑一下,(别跟我说国产那些软件,剪辑完视频强制加上广告片头片尾恶心的一批),但是PR毕竟太重量级,剪个简单的视频都要花不少时间 ...

  3. [转帖]第24/24周 数据库维护(Database Maintenance)

    https://www.cnblogs.com/woodytu/p/4795542.html 哇哦,光阴似箭!欢迎回到性能调优培训的最后一期.今天我会详细讲下SQL Server里的数据库维护,尤其是 ...

  4. [转帖]9.2 TiFlash 架构与原理

    9.2 TiFlash 架构与原理 相比于行存,TiFlash 根据强 Schema 按列式存储结构化数据,借助 ClickHouse 的向量化计算引擎,带来读取和计算双重性能优势.相较于普通列存,T ...

  5. tidb备份恢复的方式方法

    tidb备份恢复的方式方法 摘要 可以单独每个数据库实例进行备份,但是这种机制实在是太慢了. 网上查资料发现可以使用 tiup br 的方式进行备份. 但是大部分文档都比较陈旧, 官网上面又比较贴心的 ...

  6. [转帖]深入理解mysql-第十一章 mysql查询优化-Explain 详解(中)

    一.执行计划-type属性 执行计划的一条记录就代表着MySQL对某个表的执行查询时的访问方法,其中的type列就表明了这个访问这个单表的方法具体是什么,比方说下边这个查询: mysql> EX ...

  7. [转帖]gdb进阶调试技巧

    https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作.基本的gdb操作就不在这里赘述了. 打印各种变量 ...

  8. [转帖]疑问:进程在竞争CPU时并没有真正运行,为什么还会导致系统的负载升高?

    疑问:进程在竞争CPU时并没有真正运行,为什么还会导致系统的负载升高? 因为存在CPU上下文切换. linux系统说明 Linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行.当然,这些 ...

  9. [转帖]Redis 使用指南:深度解析 info 命令

    https://www.cnblogs.com/hwpaas/p/9442410.html Redis 是一个使用  ANSI C 编写的开源.基于内存.可选持久性的键值对存储数据库,被广泛应用于大型 ...

  10. 02uni-app v-for循环列表 v-if的使用

    onLoad onShow onHide函数的使用## 这三个函数的使用 // 监听页面的加载 参数e是上一个页面传递过来的参数 参数是一个对象 如果没有为空{} onLoad(e) { consol ...