原文:https://blog.csdn.net/q568360447/article/details/71125623
在制作游戏时,我们在切换场景时经常需要增加一个淡入淡出的效果。这里,我们利用Unity自带的动画系统制作一个场景的淡入淡出的效果。步骤如下:
- 在游戏中新建一个游戏对象,给游戏添加一个GUITexture组件,并设置好相关的参数后,制作成prefab。如下图:
-
给这个prefab制作1个动作文件Animation,这个动作一会持续2秒,动画的持续过程会改变此prefab中GUITexture里的Color.a的值。在第0帧处,color.a的值为0,在动画的第1秒处color.a的值为0.5,在动画第2秒处color.a的值又变化为0.此时就完成了一个alpha值的渐变动画。
-
加控制代码
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagerment;
public class LoadLevelFadeEffect : MonoBehaviour {
[HideInInspector]
public int levelIndex;
// Use this for initialization
void Awake () {
//这个脚本不会在切换场景时被销毁
DontDestroyOnLoad(this.gameObject);
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 注:这个方法在unity引擎中的动画系统中利用事件调用。下面的DestroySelf同样在Unity中调用
/// </summary>
public void Test()
{
//这里是场景切换的逻辑。
SceneManager.LoadScene(levelIndex);
……
}
public void DestroySelf()
{
Destroy(this.gameObject);
}
}
- 将上面的脚本添加给我们制作的prefab中,并在该prefab的动画的第1秒处的关键帧上添加事件,执行Test()函数。在动画播放完毕后的关键帧上再添加事件,执行DestroySelf()函数,表示销毁自身。
至此,整个切换场景的淡入淡出效果实现完毕。但是这样做有几点是需要注意的:
- 在需要切换场景的时候只需要生成这个Prefab即可,生成代码如下:
//在场景中生成该Prefab
GameObject go = UIManager.Instance.LoadGameObject("Others/Fade");
GUITexture gt = go.GetComponent<GUITexture>();
//保证GUITexture可以覆盖整个游戏屏幕
gt.pixelInset = new Rect(-100, -100, Screen.width, Screen.height);
- 这个淡入淡出只针对游戏内的场景有效,无法将游戏中的UI也淡入淡出。
- 这样做会让游戏中的很多代码在工程外调用,由引擎调用,因此后期在维护时会增加成本。因此必须在调用代码时做好注释,表明这一段代码是由引擎调用的。
网友评论