• Unity 场景淡入淡出效果


     一. 使用Dotween,建议使用我的方式

       FindObjectOfType().FadeIn(() =>
            {
                Debug.Log("Fade in MenuStart Scene");
            });

    1. using DG.Tweening;
    2. using System;
    3. using System.Numerics;
    4. using UnityEngine;
    5. using UnityEngine.UI;
    6. public class SceneFadeInAndOut : MonoBehaviour
    7. {
    8. #region 字段和属性的定义
    9. //渐变的速率
    10. public float m_fTime = 1f;
    11. //RawImage组件
    12. RawImage _rawImage;
    13. Color blackAlpha0 => new Color(0, 0, 0, 0);
    14. #endregion
    15. private void Awake()
    16. {
    17. _rawImage = FindObjectOfType();
    18. }
    19. void Update()
    20. {
    21. if (Input.GetKeyDown(KeyCode.I))
    22. {
    23. FadeIn(null);
    24. }
    25. if (Input.GetKeyDown(KeyCode.O))
    26. {
    27. FadeOut(null);
    28. }
    29. }
    30. ///
    31. /// 设置场景的淡入
    32. ///
    33. public void FadeIn(Action complete)
    34. {
    35. _rawImage.gameObject.SetActive(true);
    36. _rawImage.color = Color.black;
    37. _rawImage.DOColor(blackAlpha0, m_fTime).SetEase(Ease.InOutQuad).OnComplete(() =>
    38. {
    39. _rawImage.gameObject.SetActive(false);
    40. complete?.Invoke();
    41. });
    42. }
    43. ///
    44. /// 设置场景的淡出
    45. ///
    46. public void FadeOut(Action complete)
    47. {
    48. _rawImage.gameObject.SetActive(true);
    49. _rawImage.color = blackAlpha0;
    50. _rawImage.DOColor(Color.black, m_fTime).SetEase(Ease.InOutQuad).OnComplete(() =>
    51. {
    52. complete?.Invoke();
    53. });
    54. }
    55. }

     二. https://www.cnblogs.com/MoRanQianXiao/p/7691790.html

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.UI;
    5. public class SceneFadeInAndOut : MonoBehaviour
    6. {
    7. #region 单例模式
    8. //设置静态的字段来模拟全局的变量(开始为空)
    9. private static SceneFadeInAndOut _instance = null;
    10. ///
    11. /// 只读属性的设置
    12. ///
    13. public static SceneFadeInAndOut Instance
    14. {
    15. get
    16. {
    17. //如果一开始的为空的话
    18. if (_instance == null)
    19. {
    20. //进行类的实例化的操作
    21. _instance = new SceneFadeInAndOut();
    22. }
    23. //下一个访问的话_instance就不为空直接返回字段
    24. return _instance;
    25. }
    26. }
    27. private SceneFadeInAndOut() { }
    28. #endregion
    29. #region 字段和属性的定义
    30. //渐变的速率
    31. public float floatColorChangeSpeed = 1f;
    32. //RawImage对象
    33. public GameObject goRawImage;
    34. //RawImage组件
    35. private RawImage _rawImage;
    36. //屏幕是否要逐渐清晰(默认是需要的)
    37. private bool _isSceneToClear = true;
    38. //屏幕是否需要逐渐变暗(默认是不需要的)
    39. private bool _isSceneToBlack = false;
    40. #endregion
    41. void Awake()
    42. {
    43. //如果goRawImage不为空的话
    44. if (goRawImage)
    45. {
    46. //得到RawImage组件
    47. _rawImage = goRawImage.GetComponent();
    48. }
    49. }
    50. void Update()
    51. {
    52. if (_isSceneToClear)
    53. {
    54. SceneToClear();
    55. }
    56. else if (_isSceneToBlack)
    57. {
    58. SceneToBlack();
    59. }
    60. if(Input.GetKeyDown(KeyCode.C))
    61. {
    62. SetSceneToClear();
    63. }
    64. if (Input.GetKeyDown(KeyCode.D))
    65. {
    66. SetSceneToBlack();
    67. }
    68. }
    69. #region 公共方法的定义
    70. ///
    71. /// 设置场景的淡入
    72. ///
    73. public void SetSceneToClear()
    74. {
    75. InitToBlack();
    76. _isSceneToClear = true;
    77. _isSceneToBlack = false;
    78. }
    79. ///
    80. /// 设置场景的淡出
    81. ///
    82. public void SetSceneToBlack()
    83. {
    84. _isSceneToClear = false;
    85. _isSceneToBlack = true;
    86. }
    87. #endregion
    88. #region 私有方法的定义
    89. ///
    90. /// 屏幕逐渐清晰(淡入)
    91. ///
    92. private void FadeToClear()
    93. {
    94. //插值运算
    95. _rawImage.color = Color.Lerp(_rawImage.color, Color.clear, floatColorChangeSpeed * Time.deltaTime);
    96. }
    97. ///
    98. /// 屏幕逐渐暗淡(淡出)
    99. ///
    100. private void FadeToBlack()
    101. {
    102. //插值运算
    103. _rawImage.color = Color.Lerp(_rawImage.color, Color.black, floatColorChangeSpeed * Time.deltaTime);
    104. }
    105. ///
    106. /// 屏幕的淡入
    107. ///
    108. private void SceneToClear()
    109. {
    110. FadeToClear();
    111. //当我们的a值小于等于0.05f的时候 就相当于完全透明了
    112. if (_rawImage.color.a <= 0.05f)
    113. {
    114. //设置为完全透明
    115. _rawImage.color = Color.clear;
    116. //组件的开关设置为关闭的状态
    117. _rawImage.enabled = false;
    118. //布尔条件设置为false
    119. _isSceneToClear = false;
    120. }
    121. }
    122. private void InitToBlack()
    123. {
    124. //组件的打开
    125. _rawImage.enabled = true;
    126. //设置为完全不透明的状态
    127. _rawImage.color = Color.black;
    128. //布尔条件当到达指定的阿尔法值得时候设置为false
    129. _isSceneToBlack = false;
    130. }
    131. ///
    132. /// 屏幕的淡出
    133. ///
    134. private void SceneToBlack()
    135. {
    136. //组件的打开
    137. _rawImage.enabled = true;
    138. FadeToBlack();
    139. //当前的阿尔法值大于0.95f的时候 表示已经接近于完全不透明的状态
    140. if (_rawImage.color.a >= 0.95f)
    141. {
    142. //设置为完全不透明的状态
    143. _rawImage.color = Color.black;
    144. //布尔条件当到达指定的阿尔法值得时候设置为false
    145. _isSceneToBlack = false;
    146. }
    147. }
    148. #endregion
    149. }//class_end

  • 相关阅读:
    Matlab:Matlab编程语言学习之向量化编程的简介、技巧总结案例应用之详细攻略
    拒绝“内卷”跃迁软件测试最大门槛,我是如何从月薪8K到15K的?
    尚硅谷设计模式(十九)中介者模式
    springboot shiro vue使用websocket案例
    2023年10月12日
    (10)Qt---项目打包
    Java如何实现pdf转base64以及怎么反转?
    树莓派Pico
    QT中messageBox的使用
    米哈游、复旦发布,具备感知、大脑、行动的大语言模型“智能体”
  • 原文地址:https://blog.csdn.net/qq_39097425/article/details/133135353