- 说明
- . 淡入fadeIn:进场;场景画面由黑暗模糊逐渐变得清晰明亮、完全进入/显现。表示新的情节的开始。从无→有
- . 淡出fadeOut:退场;场景画面由清晰明亮逐渐变得模糊暗淡,以至完全出去/消失。表示剧情一个段落的结束。从有→无
- 思路
- .结束时,先播放过场动画,再开始加载新场景
- .切换到新场景时,先播放动画,再加载
- .使用协程实现场景的延时加载
-
转场思路
- 示例1:使用动画状态转换实现延迟转场
- 1.准备2个场景:S0、S1;在S0中完成:
- 2.创建画布Canvas
- 3.创建图像Image:
- .铺满画布,填充黑色,透明度为0;取消Raycast Target;如果画布中有更多元素,请确保图像Image位于最上面,以便覆盖在所有元素之上
- .创建从透明度0到不透明度255的过渡动画;取消动画循环Loop
- .打开动画状态机,创建1个空状态Null,并设置为默认状态;创建Null状态和动画状态的过渡,条件设置为Bool:isOn;取消过渡等属性
-
动画状态机
- 4.创建脚本Demo.cs,指定图像Image的动画状态机,实现状态转换和协程加载;协程延迟时间应该略短于动画时间;挂载到画布Canvas
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Demo : MonoBehaviour
{
public Animator animator;
public void setAni()
{
StartCoroutine(loadSceneByName());
}
IEnumerator loadSceneByName()
{
animator.SetBool("isOn", true);
yield return new WaitForSeconds(1);
SceneManager.LoadScene("s1");
}
}
- 5.创建按钮Button,指定脚本事件setAni()
- 6.运行游戏,查看转场过渡效果
- 示例2:使用动画事件实现延迟转场
- [核心]在图像Image过渡动画结束前若干帧处,添加动画事件,指定为脚本中的loadSceneByName()方法;保留系统自动为对象添加的动画控制器组件Animator;为过渡图像Image指定animator变量;其它设置同上例
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Demo : MonoBehaviour
{
public Animator animator;
public void setAni()
{
animator.SetBool("isOn", true);
}
public void loadSceneByName(string str)
{
SceneManager.LoadScene(str);
}
}
- 示例3:使用Animation组件转场
- [核心]给画布Canvas添加动画Animation组件,控制它播放动画;动画快结束时,触发动画事件,加载场景;其它设置同前例
-
Animation组件设置
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Demo : MonoBehaviour
{
public Animation ani;
public void playAni()
{
ani.Play();
}
public void loadSceneByName(string str)
{
SceneManager.LoadScene(str);
}
}