在每次游戏从一个场景切换到另一个场景时,是否有一种方法可以激活淡入淡出的动画,而无需用户进行诸如敲击预定键的特定操作? 基本上,转换只是因为场景发生变化才需要开始。
我有一堆场景,我需要在它们之间添加淡入淡出到黑色过渡。 我发现所有的教程都需要一些特定的按键输入或正在发生的事情,而我只有很少的视频,在大多数情况下都无法与用户互动。
以防万一这是不可能的(或者对于新手来说是不切实际的),我想我可以将动画连接到用户,按下将您发送到其他场景的按钮(也可以在该场景中使用帮助)。而且第一个场景可以使用计时器/延迟。
* Unity和Visual Studio更新为最新的稳定版本。
答案 0 :(得分:2)
因此,每次需要更改场景时,实际上都需要先淡出屏幕,然后运行场景更改,然后在加载新场景后-淡入屏幕。您可以这样操作:
1)在项目的开始场景中创建新的Canvas对象。将画布模式设置为“ 屏幕空间-覆盖”,并确保排序顺序设置得足够高,以便您的画布始终位于最上方。
2)在此Canvas上创建一个空图像并调整其大小,使其覆盖所有碎石。将颜色设置为透明。不要忘记关闭图像的“ 射线广播目标”(否则您将无法通过鼠标单击图像)
3)将此脚本添加到您的Canvas对象:
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class SceneChanger : MonoBehaviour
{
enum FadeStatus
{
fading_id,
fading_out,
none
}
public static SceneChanger Instance;
public Image fadeImage;
public float fadeDuration;
private FadeStatus currentFadeStatus = FadeStatus.none;
private float fadeTimer;
private string sceneToLoad;
void Start()
{
if (Instance == null)
{
Instance = this;
SceneManager.sceneLoaded += OnSceneLoaded;
}
else
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
//scene loaded, running fade-in
currentFadeStatus = FadeStatus.fading_id;
}
public void ChangeScene(string _name)
{
sceneToLoad = _name;
currentFadeStatus = FadeStatus.fading_out;
}
void Update()
{
if(currentFadeStatus != FadeStatus.none)
{
fadeTimer += Time.deltaTime;
if(fadeTimer > fadeDuration) //done fading
{
fadeTimer = 0;
if (currentFadeStatus == FadeStatus.fading_out)
{
SceneManager.LoadScene(sceneToLoad);
fadeImage.color = Color.black;
}
else
fadeImage.color = Color.clear;
currentFadeStatus = FadeStatus.none;
}
else //still fading
{
float alpha = 0;
if (currentFadeStatus == FadeStatus.fading_out)
alpha = Mathf.Lerp(0, 1, fadeTimer / fadeDuration);
else
alpha = Mathf.Lerp(1, 0, fadeTimer / fadeDuration);
fadeImage.color = new Color(0, 0,0, alpha);
}
}
}
}
4)返回编辑器,然后将透明图像分配到SceneChanger脚本的其字段中,并调整fadeDuration(淡入淡出的时间,以秒为单位)
5)现在,您可以使用来从代码中更改场景
SceneChanger.Instance.ChangeScene("YourSceneName");
6)不要忘记添加所有需要的场景以建立设置,否则将无法正常工作。
7)您不需要,无需在其他场景上添加SceneChanger,由于DontDestroyOnLoad(),它将被保存在场景之间。