还在学习过程中,如果有大大看到请指点。

orz原来官方就有了更好的处理方法的教程,具体查看下面视屏。

[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(五) 屏幕渐变效果

由于使用原本的Application.LoadLevel()函数可以直接加载场景。

但由于太过生硬,所以这里就做一个淡入淡出的效果来进行过渡。

一、思路:

只要在加载完成并切换完成之前,先黑屏,切换完成之后在在恢复就可以了。

1.创建一个遮罩。

颜色用黑色。#000

Alpha默认设置为0。

让遮罩层覆盖整个屏幕。

设置遮罩层不被销毁。

2.执行场景切换时,修改遮罩层的Alpha值,由透明修改成不透明。

注:在脚本里,Alpha值0是透明,1是不透明。

3.场景切换。

4.场景切换成功后,修改遮罩层的Alpha值,由不透明修改成透明。

二、主要问题:

1.如果让遮罩层一直处于最上层?

使用“UI” => "Panel"来做为遮罩层就可以了。

UI层一直是最上层的.

假如不使用UI,还要调整它不被其它游戏元素给挡着。

2.同是UI层的元素,如果遮罩层把别的UI给遮住了,那么其它的UI面板就用不了了。

这个目前还没找到解决办法 。。。我目前的做法是直接脚本另做处理控制直接不显示了。

3.切换场景后,原场景的游戏对象都会被销毁,要如何让遮罩层不被销毁?

给遮罩层增加个脚本,在脚本里加上这个就可以了,具体可以查文档。

    void Awake()
{
DontDestroyOnLoad(this.transform.gameObject);
}

三、开发

1.定义好一些公共方法方便使用。

由于目前我只懂得在脚本里使用“Tag”元素来获得游戏组件,所以先创建一个类并创建一个静态的方法,做为公用。

public class Settings : MonoBehaviour
{
/// <summary>
/// 根据标记加载对象。
/// </summary>
/// <returns></returns>
public static TSource FindComponentByTag<TSource>(string tag) where TSource : Component
{
TSource source = null; //找到对象。
GameObject sourceObject = GameObject.FindWithTag(tag); if (sourceObject != null)
{
source = sourceObject.GetComponent<TSource>();
}
else
{
Debug.Log("找不到“" + tag + "”脚本。");
} return source;
}
}

2.在 Unity 里创建遮罩层。

2.1.创建一个摄像机,重命名为“LoadSceneCamera”,并调整好显示屏幕。

2.2.在摄像机下面创建一个“Canvas”。并且在“Canvas”下面创建一个“Panel”,重命名为“Shade”。

2.3.选择遮罩层(“Shade”),在Inspector里给遮罩层(“Shade”)创建一个标记,命名也是“Shade”,并且在“Tag”选项里选择“Shade”。

2.4.给遮罩层(“Shade”)创建一个脚本,并命名为“LoadScene”。

3.编写脚本。

using UnityEngine;
using UnityEngine.UI;
using System.Collections; public class LoadScene : MonoBehaviour { /// <summary>
/// 是否隐藏屏幕(即:淡出)。
/// </summary>
private static bool _isHide = false; /// <summary>
/// 是否显示屏幕(即:淡入)。
/// </summary>
private static bool _isShow = false; /// <summary>
/// 渐变的 Alpha 值。
/// </summary>
private static float _start = ; /// <summary>
/// 在切换的场景名称。
/// </summary>
private static string _scene = string.Empty; void Update()
{
if (_isHide)
{
//获得遮罩层原本的颜色。
Color color = Settings.FindComponentByTag<Image>("Shade").color; //由于 Alpha 值是“0”代表透明, “1”代表不透明。
//为了平滑流畅,这里设置为每次更新增加0.1。
_start += 0.1f; //根据 color 的值并将 Alpha 值设置给新的 Color 对象。
Color end = new Color(color.r, color.g, color.b, _start); //设置遮罩层的颜色。
//Color.Lerp(color, end, 1);方法代表的从什么颜色渐变到什么颜色。具体请查文档。
Settings.FindComponentByTag<Image>("Shade").color = Color.Lerp(color, end, ); //当 _start 大于等于 1 时,表示已经渐变完成。
if (_start >= )
{
//加载新场景。
Application.LoadLevel(_scene); //将值重置成 1。
_start = ; //设置为不可淡出。
_isHide = false; //设置为可以进行淡入操作。
_isShow = true;
}
} //当淡出操作完成时。
if (!_isHide && _isShow)
{
//同上。
Color color = Settings.FindComponentByTag<Image>("Shade").color; //设置值与淡出相反。
_start -= 0.1f; if (_start <= )
{
//将值重置成 0。
_start = ; //设置为不可淡入。
_isShow = false;
} Color end = new Color(color.r, color.g, color.b, _start);
Settings.FindComponentByTag<Image>("Shade").color = Color.Lerp(color, end, );
}
} /// <summary>
/// 当需要使用淡入淡出效果来加载场景时,直接调用此方法就可以了。
/// </summary>
/// <param name="name">场景名称。</param>
public static void LoadLevel(string name)
{
_scene = name;
_isHide = true;
} /// <summary>
/// 设置当前对象不可以被销毁。
/// </summary>
void Awake()
{
DontDestroyOnLoad(this.transform.gameObject);
}
}

当需要使用淡入淡出效果来加载场景时,直接调用 LoadScene.LoadLevel() 方法就可以了。

Unity3D 4.61 实现淡入淡出的场景过渡方法。的更多相关文章

  1. iTween基础之CameraFade(摄像机淡入淡出)

    一.基础介绍:二.基础属性 原文地址: http://blog.csdn.net/dingkun520wy/article/details/50896420 一.基础介绍 CameraTexture: ...

  2. Unity3D特效-场景淡入淡出

    最近公司开始搞Unity3D..整个游戏..特效需求还是比较多的.关于UI部分的特效淡入淡出.看网上用的方法都是用个黑东东遮挡然后设置alpha这么搞....本大神感觉非常的low.而且很渣.故奋笔疾 ...

  3. unity3D打造skybox淡入淡出 - 移动开发

    原地址:http://www.it2down.com/it-mobile/426479.htm 当前位置: IT异常查询网 » unity3D打造skybox淡入淡出 - 移动开发 www.it2do ...

  4. Android动画之淡入淡出

    为了更好的说明Android动画的淡入淡出效果,这里以一个场景为例: 界面上有两个View 控件,两个View交替显示,当一个View淡入显示,另一个View淡出不可见. 我们把当前要显示的View叫 ...

  5. JQuery: JQuery效果(隐藏、显示、切换,滑动,淡入淡出,以及动画)

    JQuery:效果 JQuery效果有很多,包括隐藏.显示.切换,滑动,淡入淡出,以及动画等.隐藏:JQuery hide() 显示:JQuery show() 切换:JQuery toggle() ...

  6. [转]Android UI:看看Google官方自定义带旋转动画的ImageView-----RotateImageView怎么写(附 图片淡入淡出效果)

    http://blog.csdn.net/yanzi1225627/article/details/22439119 众所周知,想要让ImageView旋转的话,可以用setRotation()让其围 ...

  7. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

  8. Unity 启动画面淡入淡出

    前几天在玩我叫MT 2游戏的时候发现打开他们应用的时候发现他们Logo淡入淡出的效果做的挺好的,例如第一张是运营商腾讯的logo第二张是他们公司的游戏logo.我们也来模仿一下: 第一张图片:运营商的 ...

  9. 新手学习FFmpeg - 调用API编写实现多次淡入淡出效果的滤镜

    前面几篇文章聊了聊FFmpeg的基础知识,我也是接触FFmpeg不久,除了时间处理之外,很多高深(滤镜)操作都没接触到.在学习时间处理的时候,都是通过在ffmpeg目前提供的avfilter基础上面修 ...

随机推荐

  1. CentOS安装配置VSFTP服务器

    {:toc} 前言 本文用最简单的方式创建FTP服务,即创建一个大家都可以访问的目录,没有涉及到各种权限限制. 创建目录 在安装配置ftp之前,首先创建一个目录,用来做ftp根目录.我创建的是/hom ...

  2. 咏南C/S开发框架支持最新的DELPHI XE8开发

    特大好消息:咏南C/S开发框架支持最新的DELPHI XE8开发!咏南开发框架让你再无开发工具升级后顾之忧! 购买咏南开发框架送项目源码!

  3. 通过set和waitOne来控制子线程的运行和停止

    public partial class Form1 : Form { //自动重置事件类 //主要用到其两个方法 WaitOne() 和 Set() , 前者阻塞当前线程,后者通知阻塞线程继续往下执 ...

  4. Apache服务器配置默认首页文件名和网站路径

    默认首页的配置: 第一种:直接修改apache服务器的配置文件./conf/httpd.conf中的DirectoryIndex,如:(项目web以index.php为首页) <IfModule ...

  5. OC:习题来自平时搜索

    == 第一部分 ==  类变量的@protected ,@private,@public,@package,声明各有什么含义?写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?面向对象的三大特征 ...

  6. Maven仓库的布局

    任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式.例如log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/ ...

  7. oracle查看字符集后修改oracle服务端和客户端字符集的步骤

    1.oracle server端字符集查询代码如下:select userenv ('language')  from dual; server字符集修改: 将数据库启动到RESTRICTED模式下做 ...

  8. Sending messages to non-windowed applications -- AllocateHWnd, DeallocateHWnd

    http://delphi.about.com/od/windowsshellapi/l/aa093003a.htm Page 1: How Delphi dispatches messages in ...

  9. C++ Primer 学习笔记_67_面向对象编程 --转换与继承、复制控制与继承

    面向对象编程 --转换与继承.复制控制与继承 I.转换与继承 引言: 由于每一个派生类对象都包括一个基类部分,因此能够像使用基类对象一样在派生类对象上执行操作. 对于指针/引用,能够将派生类对象的指针 ...

  10. Delphi 设置WebBrowser 代理服务器 与 UserAgent

    uses UrlMon, WinInet; {----------------------------------------------------------------------------- ...