麦田物语学习笔记:场景切换淡入淡出和动态UI显示

基本流程

人物在切换场景有些僵硬,所以增加淡入淡出效果

1.代码思路

(1)核心原理是控制Fade Panel中的CanvasGroup中的Alpha值的大小来实现淡入淡出的效果

(2)用协程去表示变黑或变透明

(3)人物输入被阻拦的情况下,人物却还在移动,这个问题需要解决

2.代码实现

在TransitionManager中去获取相应变量,并实现相应协程

cs 复制代码
private CanvasGroup fadeCanvasGroup;

private bool isFade;

private void OnTransitionEvent(string sceneToGo, Vector3 positionToGo)
{
    if(!isFade)
        StartCoroutine(Transition(sceneToGo, positionToGo));
}

private IEnumerator Transition(string sceneName, Vector3 targetPosition)
{
    //呼叫卸载场景之前要做的事
    EventHandler.CallBeforeSceneUnloadEvent();

    yield return Fade(1);

    yield return SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());

    yield return LoadSceneSetActive(sceneName);

    //移动人物坐标
    EventHandler.CallMoveToPosition(targetPosition);

    yield return Fade(0);

    //呼叫加载场景之后的事件
    EventHandler.CallAfterSceneLoadedEvent();
}

private IEnumerator Fade(float targetAlpha)
{ 
    isFade = true;

    fadeCanvasGroup.blocksRaycasts = true;//控制玩家在加载的过程中无法点击

    float speed = Mathf.Abs(fadeCanvasGroup.alpha - targetAlpha) / Settings.fadeDuration;

    while (!Mathf.Approximately(fadeCanvasGroup.alpha, targetAlpha))//因为判断浮点型相等不易判断,所以取近似就行了
    {
        fadeCanvasGroup.alpha = Mathf.MoveTowards(fadeCanvasGroup.alpha, targetAlpha, speed * Time.deltaTime);
        yield return null;
    }

    fadeCanvasGroup.blocksRaycasts = false;

    isFade = false;
}

新增Settings中的变量

cs 复制代码
public const float fadeDuration = 0.8f;

修正Player在加载过程的动画问题

cs 复制代码
private void Update()
{
    if(!inputDisable)
        PlayerInput();
    else
        isMoving = false;
    SwitchAnimation();
}

private void FixedUpdate()
{
    if(!inputDisable)
        Movement();
}

最终效果

相关推荐
小韩博1 分钟前
小迪笔记45课之-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件
笔记·sql·网络安全·php
智嵌电子2 分钟前
【笔记篇】【硬件基础篇】模拟电子技术基础 (童诗白) 第6章 信号的运算和处理
笔记
virtual_k1smet15 分钟前
梧桐·鸿鹄-中移链assistant-level
笔记·区块链
摸鱼仙人~1 小时前
简单的GAN生成学习案例
人工智能·学习·生成对抗网络
开放知识图谱1 小时前
论文浅尝 | G2S:一个用于大语言模型的时间知识图预测的通用到具体的学习框架(ACL2025)
人工智能·学习·语言模型·自然语言处理
好奇龙猫1 小时前
【人工智能学习-AI-MIT公开课-第二节-推理:目标树与问题求解(方法)】
学习
丝斯20111 小时前
AI学习笔记整理(36)——自然语言处理
人工智能·笔记·学习
好奇龙猫2 小时前
【AI学习-comfyUI学习-第二十二-DepthAnythingV2深度图工作流-各个部分学习】
人工智能·学习
94621931zyn62 小时前
观影统计 - Cordova 与 OpenHarmony 混合开发实战
笔记
virtual_k1smet2 小时前
梧桐·鸿鹄-大数据professional
大数据·笔记