unity 渐变消失_Unity3D 4.61 实现淡入淡出的场景过渡方法。

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

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.切换场景后,原场景的游戏对象都会被销毁,要如何让遮罩层不被销毁?

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

voidAwake()

{

DontDestroyOnLoad(this.transform.gameObject);

}

三、开发

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

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

public classSettings : MonoBehaviour

{///

///根据标记加载对象。///

///

public static TSource FindComponentByTag(string tag) whereTSource : Component

{

TSource source= null;//找到对象。

GameObject sourceObject =GameObject.FindWithTag(tag);if (sourceObject != null)

{

source= sourceObject.GetComponent();

}else{

Debug.Log("找不到“" + tag + "”脚本。");

}returnsource;

}

}

2.在 Unity 里创建遮罩层。

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

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

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

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

3.编写脚本。

usingUnityEngine;usingUnityEngine.UI;usingSystem.Collections;public classLoadScene : MonoBehaviour {///

///是否隐藏屏幕(即:淡出)。///

private static bool _isHide = false;///

///是否显示屏幕(即:淡入)。///

private static bool _isShow = false;///

///渐变的 Alpha 值。///

private static float _start = 0;///

///在切换的场景名称。///

private static string _scene = string.Empty;voidUpdate()

{if(_isHide)

{//获得遮罩层原本的颜色。

Color color = Settings.FindComponentByTag("Shade").color;//由于 Alpha 值是“0”代表透明, “1”代表不透明。//为了平滑流畅,这里设置为每次更新增加0.1。

_start += 0.1f;//根据 color 的值并将 Alpha 值设置给新的 Color 对象。

Color end = newColor(color.r, color.g, color.b, _start);//设置遮罩层的颜色。//Color.Lerp(color, end, 1);方法代表的从什么颜色渐变到什么颜色。具体请查文档。

Settings.FindComponentByTag("Shade").color = Color.Lerp(color, end, 1);//当 _start 大于等于 1 时,表示已经渐变完成。

if (_start >= 1)

{//加载新场景。

Application.LoadLevel(_scene);//将值重置成 1。

_start = 1;//设置为不可淡出。

_isHide = false;//设置为可以进行淡入操作。

_isShow = true;

}

}//当淡出操作完成时。

if (!_isHide &&_isShow)

{//同上。

Color color = Settings.FindComponentByTag("Shade").color;//设置值与淡出相反。

_start -= 0.1f;if (_start <= 0)

{//将值重置成 0。

_start = 0;//设置为不可淡入。

_isShow = false;

}

Color end= newColor(color.r, color.g, color.b, _start);

Settings.FindComponentByTag("Shade").color = Color.Lerp(color, end, 1);

}

}///

///当需要使用淡入淡出效果来加载场景时,直接调用此方法就可以了。///

/// 场景名称。

public static void LoadLevel(stringname)

{

_scene=name;

_isHide= true;

}///

///设置当前对象不可以被销毁。///

voidAwake()

{

DontDestroyOnLoad(this.transform.gameObject);

}

}

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


版权声明:本文为weixin_33871105原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。