Unity协程除了实现功能还可以增加可读性

news/2025/10/26 15:31:32/文章来源:https://www.cnblogs.com/xuetieqi/p/19166907

协程作为异步、延时等待。还可以作为Update的解耦已读方案。

以一个UI淡进淡出为例。

不是用协程时,Lerp的更新都包含在Update方法中:

 1  1 using UnityEngine;
 2  2 using UnityEngine.UI;
 3  3 
 4  4 namespace UI.MainMenu
 5  5 {
 6  6     public class FadeInOut : MonoBehaviour
 7  7     {
 8  8         [SerializeField]private Image fadeImage;
 9  9         [SerializeField] private float fadeTime = 1f;
10 10 
11 11         private float timer;
12 12         private bool isFadeOut = false;
13 13         private bool isFadeIn = false;
14 14 
15 15         private void Awake()
16 16         {
17 17             fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, 1);
18 18             isFadeIn = true;
19 19             isFadeOut = false;
20 20             timer = 0;
21 21         }
22 22 
23 23 
24 24         private void Update()
25 25         {
26 26             HandleFadeIn();
27 27             HandleFadeOut();
28 28             Debug.Log(fadeImage.color.a);
29 29         }
30 30 
31 31 
32 32         private void HandleFadeIn()
33 33         {
34 34             if (!isFadeIn) return;
35 35             if (timer > fadeTime) return;
36 36             timer = timer + Time.deltaTime;
37 37             // 让透明的从255 降低到 0 
38 38             fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, Mathf.Lerp(1, 0, timer / fadeTime));
39 39         }
40 40 
41 41         private void HandleFadeOut()
42 42         {
43 43             if (!isFadeOut) return;
44 44             if (timer > fadeTime) return;
45 45             timer = timer + Time.deltaTime;
46 46             // 让透明的从255 降低到 0 
47 47             fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, Mathf.Lerp(0, 1, timer / fadeTime));
48 48         }
49 49 
50 50 
51 51         private void OnDestroy()
52 52         {
53 53             isFadeOut = true;
54 54             isFadeIn = false;
55 55             timer = 0;
56 56         }
57 57     }
58 58 }
View Code

使用协程后,可以分而治之

 1 using System;
 2 using System.Collections;
 3 using UnityEngine;
 4 using UnityEngine.UI;
 5 
 6 namespace UI.MainMenu
 7 {
 8     public class FadeInOut : MonoBehaviour
 9     {
10         [SerializeField] private Image fadeImage;
11         [SerializeField] private float fadeTime = 1f;
12         private float timer;
13 
14         private void Awake()
15         {
16             fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, 1);
17             StartCoroutine(FadeCoroutine(0, fadeTime, null));
18         }
19 
20 
21         private void Update()
22         {
23             Debug.Log(fadeImage.color.a);
24         }
25 
26 
27         private void OnDestroy()
28         {
29             StartCoroutine(FadeCoroutine(1, fadeTime, null));
30         }
31 
32 
33         IEnumerator FadeCoroutine(float targetAlpha, float duration, Action onComplete)
34         {
35             timer = 0;
36             while (timer < fadeTime)
37             {
38                 timer = timer + Time.deltaTime;
39                 // 让透明的从255 降低到 0 
40                 fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, Mathf.Lerp(1, 0, timer / fadeTime));
41                 yield return null;
42             }
43 
44             fadeImage.color = new Color(fadeImage.color.r, fadeImage.color.g, fadeImage.color.b, 0);
45             onComplete?.Invoke();
46         }
47     }
48 }
View Code

 

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

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

相关文章

2025年TPU厂家权威推荐榜:专业TPU加纤、TPU改性生产技术实力与市场口碑深度解析

2025年TPU厂家权威推荐榜:专业TPU加纤、TPU改性生产技术实力与市场口碑深度解析 随着全球高分子材料行业的快速发展,热塑性聚氨酯弹性体(TPU)作为一种性能优异的高分子材料,在汽车制造、电子电器、医疗器械、运动…

Nginx程序结构及核心配置

Nginx程序结构及核心配置1. 程序结构 $ sudo rpm -ql nginx /etc/logrotate.d/nginx # 配置日志切割策略 /etc/nginx # nginx 主程序存放路径 /etc/nginx/conf.d # nginx 配置文件目录 /etc/nginx/conf.d/default.conf…

事倍功半是蠢蛋57 typora相对路径图片上传到github

3️⃣ Typora 中设置图片自动复制(推荐) 打开 Typora → 文件(File) → 偏好设置(Preferences) → 图像(Images): 插入图片时:选择 “复制图片到指定路径” 指定路径:./images 插入时使用:相对路径 以后你在 Typ…

Nginx部署星益小游戏平台(静态页面)

Nginx部署星益小游戏平台(静态页面)1. 星益小游戏平台部署 源码下载:https://c1026.dmpdmp.com/e01306e2fdcd92aac114784572ec6e20/68a424b6/2019/08/17/f1aac2083a4d2e76196e57e68aed173f.zip?fn=%E6%98%9F%E7%9B…

hadoop应用遇到的问题

当遇到如下问题,大致是安装包有问题,需要重新下载安装包,但是直接用命令行下载需要十个小时,这边在widows上下载好在传送到虚拟机 接着按照以下步骤 结合你当前hdfs命令功能受限的问题,以下是彻底修复Hadoop环境的…

企业级Nginx安装部署

企业级Nginx安装部署1. Nginx 安装方式编译安装:使用源码,根据企业业务需求,需要什么功能,编译时添加什么模块,但是安装过程较为繁琐 自动化安装:配置好安装源,直接通过自动化工具安装即可 二进制安装:解压即用…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,聚焦产能、专利与环保的实力品牌深度解析

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单以 “产能保障 + 专利技术 + 环保标准” 为核心评估体系,突破传统单一性能评选局限:产能维度考…

以“听”为基,以“做”为翼

原文:Scalers:大学生上课为什么一定要认真听讲? https://www.scalerstalk.com/816-attention 读《大学生上课为什么一定要认真听讲?》,我对课堂学习的重要性有了更为深刻的体悟。 课堂是知识传递的核心阵地,老师…

序列密码基本模型

随机序列 基本概念 https://www.cnblogs.com/luminescence/p/18938331 最终周期序列 设\(\{s_i\}^{\infty}_{i=1}\)是一条序列,假如存在正整数\(t\)和\(r\),使得对于任意\(i>=t\)都有\(s_{i+r} = s_i\) 则最小整数…

企业级Web应用及Nginx介绍

企业级Web应用及Nginx介绍1. Nginx 简介 Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,精准检测与稳定性能兼具的行业优选解析

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单以 “精准检测认证 + 长期稳定性能” 为核心评估逻辑,突破传统评选单一性:检测维度严格执行《铝…

11种排序算法的Python代码实现

一、算法信息直接插入排序 O(n^2),O(1),稳定 折半插入排序 O(n^2),O(1),稳定 希尔排序 时间复杂度与增量序列有关,O(1) 冒泡排序 O(n^2),O(1),稳定 快速排序 O(nlogn),O(1),不稳定 简单选择排序 O(n^2),O(1),不稳定 堆…

解码Linux文件IO之中文字库原理与应用

中文字库核心概念 在嵌入式项目中显示汉字,需解决 “计算机如何存储和识别汉字” 的问题 —— 早期 ANSI 字符集仅收录 256 个字符(无中文),因此中国制定了GB2312 简体中文字符集,成为嵌入式中文显示的核心标准。…

完整教程:突破NER性能瓶颈:BERT与LLM协同的混合架构实践

完整教程:突破NER性能瓶颈:BERT与LLM协同的混合架构实践2025-10-26 15:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important…

使用EasyBlogImageForTypora将Typora上传图床改为博客园——2025/10/26最新

使用Typora写作,图片即时同步到博客网站,无需第三方图床,写完可直接粘贴。支持网络图片上传。目前的使用方法和之前的教程有部分差异,所以重新写一篇使用说明 安装 EasyBlogImageForTypora 下载程序: https://git…

AVCodecContext,AVFormatContext区别

AVCodecContext,AVFormatContext区别1.AVFormatContext: 容器/流级别 核心信息: 封装格式(如.mp4,.mkv,.flv) 流的数量和类型 元数据(Metadata,如作者标题) 时长,比特率 I/O上下文(用于读写数据) 2.AVCodecCon…

题解:P5853 [USACO19DEC] Tree Depth P

题意:对于逆序对数为 \(k\) 的长为 \(n\) 的排列,建出笛卡尔树,求对于每个点 \(i\) 在所有树中的深度之和。 做法: 首先不考虑笛卡尔树的事情,我们只算满足条件的排列个数,这个是经典的可以 \(O(n^3)\) 解决的问…

2025 年 10 月门窗十大品牌综合实力权威推荐榜单,聚焦高端定制需求与全案交付能力

2025 年 10 月门窗十大品牌综合实力权威推荐榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布。本次榜单针对高端市场需求,以 “高端定制 + 全案交付” 为核心评选维度,突破传统评选框架:定制维度评估…

idea或pycharm工具报python packaging tools not found. install packaging tools

这时候,我们找到需要添加的解释器的位置,我这里是以自己添加的为例(位置是:D:\AdvancedSoftware\python3.13.2\install),点击进入这个目录,然后在目录栏输入cmd,并回车进入命令终端打开cmd窗口输入命令: 01:…

力扣 第473场周赛(A~D)

力扣 第473场周赛(A~D)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");A:3726. 移除十进制表示中的所有零简单题,转str后去掉所有0。1 class Solution: 2…