Unity利用UGUI RawImage组件制作转场动画

最近接到了一个unity全景图的小项目,由于在不同的场景之间转场时直接转会太过生硬,因此要求有个Alpha转场的动画。于是想到两种可行的方案:

一、UGUI方案

用UGUI显示当前屏幕纹理,然后进行场景切换,切换好之后,在把UGUI隐掉。这种方案适合任何场景的切换。
先看效果:

Unity 利用UGUI制作转场动画的演示

直接上代码:

// 调用这个方法,就可以直接把全景图纹理更换为newTex
public ChangeScene( Texture newTex )
{// 暂时关闭玩家控制_controller.enable = false;// 启动切换协程StartCoroutine(StartSceneChange(newTex));
}// 更换纹理的协程
private IEnumerator StartSceneChange(SceneNode node)
{// 这里要等到当前帧渲染完成,否则截屏结果将不正确。yield return new WaitForEndOfFrame();// 开始截屏,保存当前的屏幕画面到一张纹理中。var oldtex = new Texture2D(Screen.Width, Screen.Height, TextureFormat.RGB24, false );oldtex.ReadPixels(rectScr, 0, 0);oldtex.Apply();// 等待UGUI完成渐隐yield return Switch(oldtex, newTex);// 销毁截屏Destroy(oldtex);
}public IEnumerator Switch(Texture oldTex, Texture newTex)
{// 激活UGUI并将截屏显示到RawImagerawImage.gameObject.SetActive(true);yield return null;_rawImage.texture = oldTex;rawImageCanvasGroup.alpha = 1;yield return null;// 更换球体纹理为新的全景图_material.SetTexture(GameLogic.mainTex, newTex);// 渐隐UGUIwhile (_group.alpha > 0.01f){_group.alpha -= speed * Time.deltaTime;yield return null;}// 隐藏UGUI_rawImage.texture = null;rawImageCanvasGroup.alpha = 0;rawImage.gameObject.SetActive(false);
}

代码非常容易理解。值得一提的是,Unity截屏的API,其实是有现成的:

ScreenCapture.CaptureScreenshotAsTexture();

但是,这个截屏出来的格式是RGBA格式的,直接贴到RawImage上,会只有UI显示,场景里的东西是透明的。这个解决方案有三:

  1. 格式转换为RGB,但我没有找到Texture有对应的转换API;
  2. 写个shader替换默认的Rawimage材质,不使用A通道。
  3. 我用的方法,不用自带的截屏API,二是自己用ReadPixels来获取。

二、Shader方案

由于全景图的纹理,我是贴到一个球体上的,所以,最直接的方法,就是写Shader,在两种全景纹理下进行切换。这种方案非常适合全景图切换(只是替换两个纹理),但不太适合3d场景转场。
效果:

Unity转场shader效果演示

Shader是用ASE做的,比较简单,连线如下图:

其实,这里只是描述基本的原理,如果想要做到更多的转场效果,玩法非常的多,第一种方法,用UGUI的,也可以写Shader来实现更多炫酷的效果。

Unity利用UGUI RawImage组件制作转场动画相关推荐

  1. mysql链路跟踪工具_EasySwoole利用链路追踪组件制作甩锅工具

    前言 最近前端老是反馈API调用异常,说请求成功但是没有数据返回! 我写的代码怎么可能有bug,肯定是前端调用的方式不对! 经过一番套鼓,直接把请求参数和响应内容打印到控制台,果然不出我所料,请求缺少 ...

  2. Unity 之 UGUI Toggle组件介绍和简例

    Unity 之 UGUI Toggle组件介绍和简例 复合组件Toggle的组成: Toggle:自身挂载Toggle组件,并且对有对子物体的引用. Background:就是个Image组件,用来当 ...

  3. Unity 之 UGUI Dropdown组件使用简析

    Unity 之 UGUI Dropdown组件使用简析 官方释义 示例展示 代码操作 官方源码 官方释义 官方文档:https://docs.unity3d.com/Manual/script-Dro ...

  4. Unity用Animation组件制作简单的动画

    游戏中经常会出现动态提示,例如提示当前金钱不足,一般会从屏幕中央弹出,然后缓慢的向上飘去. 今天游戏项目中遇到了这么个要求,以前做过几次,但总是会忘记,而且随着unity版本更新,新版本总有些莫名其妙 ...

  5. Unity利用UGUI 无代码实现卷轴拉开效果(配合Dotween动画)

    先看效果视频 从左侧 中间 右侧打开 中心打开.mp4 从左侧打开.mp4 右侧打开.mp4 下面再来说实现方法: 1.首先需要将UI切成3部分,分为(1)左边的卷轴 (2)中间部分 (3)右边的卷轴 ...

  6. Unity 之 UGUI Dropdown下拉控件展开方向控制

    Unity 之 UGUI Dropdown下拉控件展开方向控制 有个需要控制下拉控件展开方向的需求,不得探索一下这个下拉方向是由那些属性控制的. 其实我们正常使用的时候你可以发现,下拉控件默认向下展开 ...

  7. Unity中ugui如何制作不规则按键的两种方法

    Unity中ugui如何制作不规则按键的两种方法 两种不同的方案 目前,关于这个问题如何,解决通过搜索引擎我们能找到两种不同的方案: 多边形碰撞器: 该方法是指给精灵(Sprite)添加一个多边形碰撞 ...

  8. 使用Unity的UGUI制作带时间头的相册

    Unity  UGUI相册制作并且加上时间头的效果 在介绍排版之前需要先了解一下Unity中的排版布局方式的三个组件 1.Horizontal Layout Group(水平布局) 1.Padding ...

  9. 【Unity】UGUI超级简单的摇杆制作,摇杆控制物体移动

                [Unity]UGUI超级简单的摇杆制作,摇杆控制物体移动 目录 1.效果展示 2.博客介绍 3.具体内容和思路 (1)摇杆制作 (2)移动控制 4.资源包下载 5.推送 6. ...

  10. unity加载sprite_Unity 利用UGUI打包图集,动态加载sprite资源

    今天做了一个UI界面,这个界面是好友界面,该界面上有若干个好友item. 需要对每个tem的头像对象(image)动态显示对应的头像.尝试利用UGUI的图集来加载,具体实现如下: 1.首先,需要知道S ...

最新文章

  1. STL学习笔记(一)
  2. docker部署Redmine项目管理平台
  3. html自动生成在线试题,HTML5测试题整理Ⅰ
  4. 北航博士,研究所月入两万,是一种什么体验?
  5. java笔记:SpringSecurity应用(二)
  6. fin.is_open()与fin.open()
  7. 研究生文献笔记(obsidian模板分享!!):zotero+bookxnote pro+obsidian
  8. WS2811B驱动使用及使用说明应用
  9. java的applet教程_Java Applet基础
  10. Golang Go语言 安装包 下载 官方包 与 Golang 中文网
  11. 垃圾盒制作过程大揭密!
  12. 对ASP.NET程序员非常有用的85个工具
  13. 个人工作资源(不断更新)
  14. Qgis教程4:文本数据的加载
  15. SCons教程(3) 编译程序
  16. opensuse 下 sled 11sp2 下安装 转换 deb 到rpm 通过alien fr net
  17. 第四次团队作业——项目Alpha版本发布
  18. php 情人节语句,告辞情话最暖心短句向男生 情人节表明语录
  19. python老是提醒双引号错误_避免最常见的python语法错误,建议收藏!
  20. 人工智能 | CIFAR10卷积神经网络实践

热门文章

  1. 程序员外企工作真的是一种好事吗?今天我就用自己的亲身经历告诉你是一种什么感受!
  2. springboot+毕业论文管理系统 计算机毕业设计附源码42124
  3. MindSpore1.10.1安装步骤详解(Ubuntu20.04+3080Ti+CUDA11.1+Python3.8)
  4. 乌合之众-大众心理研究(七)
  5. python与分形0015 - 【教程】绘制national flag
  6. 如何使用C#实现你的化易略型
  7. HDU-4571 Travel in time 动态规划
  8. slug计算机术语,关于python:Django中的“slug”是什么?
  9. 胎压监测c语言编程,汽车胎压监测系统设计论文报告.doc
  10. P1045 [NOIP2003 普及组] 麦森数 python 题解