UnityUGUI流动效果轻松实现:告别复杂Shader,一招搞定动态背景

news2024/11/16 16:35:30

引言

在Unity开发过程中,我们常常会遇到这样一个需求:将一张简单的图片通过平铺效果进行展示,以此来减少图片的大小。这个操作非常简单,只需将Image的Type设置为Tiled,然后调整RectTransform的尺寸即可。但有时候,产品经理会提出更高的要求:让这个图片动起来。这听起来有点麻烦,对吧?当然,我们可以通过写shader来实现这个功能,但现在,我要给大家介绍一个更简单的办法,只需用代码控制即可实现。

实现流动效果

我们先来看一下最终的效果。箭头流动效果展示 这个流动的效果,其实是通过控制RawImage的UV坐标来实现的。
箭头流动效果展示

实现步骤关键点

  1. 将原图片的格式设置为Repeat将原图片的格式设置为Repeat

  2. 创建RawImage,将箭头图片拖入,设置合适的大小和位置创建RawImage,拖入箭头图片,设置适合的大小位置

  3. 创建脚本,编写代码。创建脚本

  4. 将脚本挂载到RawImage上,设置参数,运行。设置参数

代码

using UnityEngine;
using UnityEngine.UI;

public class FlowArrowController : MonoBehaviour
{
    public RawImage flowArrow;
    public Vector2 originalSize;
    public FlowDirection direction = FlowDirection.Up;
    public float speed = 1f;

    private void Update()
    {
        FlowArrows(flowArrow, originalSize, direction, speed, Time.deltaTime);
    }

    private void FlowArrows(RawImage rawImage, Vector2 originalSize, FlowDirection direction, float speed, float deltaTime)
    {
        // 获取RawImage的当前UVRect
        Rect uvRect = rawImage.uvRect;

        // 根据RawImage的尺寸和原始图片尺寸计算平铺的UVRect高度和宽度
        float widthRatio = rawImage.rectTransform.rect.width / originalSize.x;
        float heightRatio = rawImage.rectTransform.rect.height / originalSize.y;
        uvRect.width = widthRatio;
        uvRect.height = heightRatio;

        // 根据方向更新UVRect的值
        switch (direction)
        {
            case FlowDirection.Up:
                uvRect.y = Mathf.Repeat(uvRect.y - (speed * deltaTime), 1);
                break;
            case FlowDirection.Down:
                uvRect.y = Mathf.Repeat(uvRect.y + (speed * deltaTime), 1);
                break;
            case FlowDirection.Left:
                uvRect.x = Mathf.Repeat(uvRect.x + (speed * deltaTime), 1);
                break;
            case FlowDirection.Right:
                uvRect.x = Mathf.Repeat(uvRect.x - (speed * deltaTime), 1);
                break;
        }

        // 更新RawImage的UVRect
        rawImage.uvRect = uvRect;
    }
}

public enum FlowDirection
{
    Up,
    Down,
    Left,
    Right
}

结论

通过上述的步骤和代码,我们就可以实现一个简单的流动效果。怎么样,是不是很简单呢?下次遇到类似的需求,就可以用这个方法来解决了。不过,如果产品经理的要求更高,比如要实现更复杂的流动效果,那可能还是需要用到shader。不过,那就不是这篇文章的内容了,我们下次再聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 操作补充:cherry-pick、变基

1. 挑选提交合并 git cherry-pick 对于多分支的代码库,将代码从一个分支转移到另一个分支是一种常见的需求,这可以分成两种情况:一种情况是,你需要另一个分支的所有代码变动,那么就采用 git merge;另一种情…

mybatis mapper.xml 比较运算符(大于|小于|等于)的写法: 转义和<![CDATA[]]>

文章目录 引言I 使用xml 原生转义的方式进行转义II 使用 <![CDATA[ 内容 ]]>引言 应用场景:查询时间范围 背景:在 *.xml 中使用常规的 < > = <= >= 会与xml的语法存在冲突 <![CDATA[]]> 比 转义符 来的繁琐 <![CDATA[]]> 表示xml解析器忽略…

HTML CSS 基础复习笔记 - 列表使用

用于自己复习 自定义列表 示例代码 <!DOCTYPE html> <html> <head><title>Definition List Example</title> </head> <body><h1>古诗</h1><dl><dt>静夜思</dt><dd>床前明月光&#xff0c;疑…

AI大模型本地简易搭建方式

AI大模型本地简易搭建方式 前言步骤下载Ollama安装Ollama修改Ollama中下载模型的位置检查Ollama是否安装成功下载模型尝试与模型对话使用API访问模型下载Docker&#xff08;后续补充Docker运行OpenWebUI方式&#xff09;总结 前言 朋友想要实现一个本地ChatGPT风格的对话功能&…

Golang基础问题

Go基础 文章目录 Go基础● Go有那些关键字&#xff1f;● Go方法与函数的区别&#xff1f;● Go函数返回局部变量的指针是否安全&#xff1f;● Go函数参数传递是值传递还是引用传递&#xff1f;● defer关键字的实现原理&#xff1f;● 内置函数make和new的区别&#xff1f;●…

Linux内网端口转公网端口映射

由于服务商做安全演练&#xff0c;把原先服务器内网的端口映射到外网端口全都关闭了&#xff0c;每次维护服务器特别麻烦&#xff0c;像数据库查询如果用原生的mysql 去连接&#xff0c;查询返回的结果乱了&#xff0c;非常不方便。 查了服务还是可以正常访问部分外网的&#x…

数据脱敏方案(doc)

数据脱敏工作不仅要确保敏感信息被去除&#xff0c;还需要尽可能的平衡脱敏所花费的代价、使用方的业务需求等多个因素。因此&#xff0c;为了确保数据脱敏的过程、代价可控&#xff0c;得到的结果正确且满足业务需要&#xff0c;在实施数据脱敏时&#xff0c;应从技术和管理两…

JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

宏景eHR sduty/getSdutyTree SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /servlet/sduty/getSdutyTree 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_c…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中&#xff0c;我们最常用的是 PreparedStatement 式的编程&#xff0c;我们看下面这个例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…

【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录 1.数据类型分类2.数值类型2.1tinyint 1字节2.2bit 0-64位2.3浮点类型float 4个字节decimal 3.字符串类型char开多少空间为多大varchar开多少是上限 存多少占多大空间日期和时间类型enum和setenum&#xff1a;枚举&#xff0c;“单选”类型&#xff1b;set&#xff1a;…

从一次 SQL 查询的全过程了解 DolphinDB 线程模型

1. 前言 DolphinDB 的线程模型较为复杂&#xff0c;写入与查询分布式表都可能需要多个类型的线程。通过了解 SQL 查询的全过程&#xff0c;可以帮助我们了解 DolphinDB 的线程模型&#xff0c;掌握 DolpinDB 的配置&#xff0c;以及优化系统性能的方法。 本教程以一个分布式 …

Python基于卷积神经网络分类模型(CNN分类算法)实现时装类别识别项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在深度学习领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Networks, CNNs&#xff0…

python拉取gitlab项目以及拉取报错处理

问题解决 问题1、unable to access https://gitlab.dome.com/web-dome/dome.git/: SSL certificate problem: self signed certificate 解决&#xff1a;打开本地git bash输入下面代码 git config --global http.sslVerify false; 问题2、Authentication failed for https:…

G1 垃圾收集器

从 JDK1.9 开始默认 G1&#xff0c;应用在多处理器和大容量内存环境中。 基础概念 Region G1 给整一块Heap内存区域均匀等分了N个 Region&#xff0c;N 默认情况下是 2048。 Region的大小只能是1M、2M、4M、8M、16M或32M (1-32M,并且为2的指数)&#xff0c;比如-Xmx16g -Xms…

JAVA 发送短信信息工具类(腾讯云)

发送短信信息工具类 import cn.hutool.core.collection.CollUtil; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.sms.v20210111.SmsClient; import com.tencentcloudapi…

Maven:下载配置教学(2024版 最简)

文章目录 一、Maven下载1.1 下载官网1.2 下载压缩包1.3 解压1.4 创建repo文件夹 二、Maven配置2.1 环境变量2.1.1 新建系统变量2.1.2 添加Path 2.2 阿里云镜像2.3 JDK2.4 本地仓库2.5 conf文件的全部内容2.6 测试安装配置是否成功 三、IDEA中配置Maven3.1 新配置3.2 推荐配置 四…

ACE Studio的成功经验:从国内到全球的市场拓展

在AI技术飞速发展的今天&#xff0c;音乐创作也正经历着一场前所未有的变革。作为这一变革的前沿代表&#xff0c;ACE Studio无疑引起了广泛关注。本文将通过对时域科技创始人Joe与曲凯的对话&#xff0c;深入探讨ACE Studio的创新理念、市场定位、技术优势以及未来发展方向。 …

20240704 每日AI必读资讯

Runway Gen-3 Alpha 详细使用教程 - 以及提示词指南大全&#xff0c;包括摄像机风格、灯光效果、运动状态类型以及风格美学、文本风格等。 - Gen-3 Alpha是Runway推出的新—代视频生成模型&#xff0c;它在保真度、一致性、运动和速度方面都比以前的模型有所改进&#xff0c;…

HTML总结2

什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;&#xff0c;超文本标记语言&#xff0c;&#xff08;是一套标记标签&#xff0c;一般用来描述网页&#xff09;。 HTML标签 HTML标记标签&#xff0c;通常被称为HTML标签&#xff0c;或者HTML标记。 标签…