暴力梭哈版:
1. 建个Canvas,Children里面加张黑图
2. 黑图的alpha调到0,Raycast Target去掉勾勾
3. 挂个Script,改变黑图的alpha
4. 在alpha调满(到1)的时候开始用SceneManagement.LoadScene(scene)载入场景
5. 把黑图的alpha重新调回0
仔细认真版:
1. 在Hierarchy内新建一个GameObject,添加新的LoadingEffect Script(文件名可随意)
2. 在新建的GameObject内新建一个Canvas物体,并同时新建一个UI Image覆盖屏幕
3. 选取UI Image的颜色,将最后一栏(ALPHA) 调到最低使得黑色图形完全透明
4. 在LoadingEffect Script内写入以下代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LoadingEffect : MonoBehaviour { public Image blackImage; public static LoadingEffect loadingEffect; public bool loadingDone = false; //Script里用到了几个magic number,调试的时候感觉效果还可以就留着了,不是好习惯要改正 ( ̄ 3 ̄) private void Awake() { if (loadingEffect == null) { loadingEffect = this; DontDestroyOnLoad(gameObject); } else if(loadingEffect!=this) { Destroy(gameObject); } } public void RunLoadingEffect(int scene) { StartCoroutine(FadeImage(scene)); } public void RunLoadingEffect_Example() { StartCoroutine(FadeImage(0)); } IEnumerator FadeImage(int scene) { while (blackImage.color.a <= 1) { Color temp = blackImage.color; temp.a += 0.03f; blackImage.color = temp; yield return new WaitForSeconds(0.03f); } loadingDone = true; SceneManager.LoadScene(scene); yield return new WaitForSeconds(0.7f); while (blackImage.color.a >= 0.01) { Color temp = blackImage.color; temp.a -= 0.03f; blackImage.color = temp; yield return new WaitForSeconds(0.03f); } loadingDone = false; } }
5. 此时在Unity界面的Inspector处查看Script的样子,应该会多出来一个空的槽位,将之前的黑色UI Image拽入槽位中以此来产生reference
6. 在别处新建一个Canvas,保持Raycast Target属性已勾选,且Canvas属性中的Order In Layer需低于黑图的Canvas
7. 在新Canvas中建一个新的Button,Inspector中查看Onclick属性,点击加号添加槽位并拉入身上带着LoadingEffect Script的GameObject,在较长的长条里选择LoadingEffect,展开小菜单后选择RunLoadingEffect_Example
//注意此时应该已经在Building Setting里设置了Scene的index
8. 运行后点击Button,场景转换间便会有一层黑色的过渡,如果使用的是example将会转换至index为0的scene处
9. 可以通过Script间的互相invoke来载入不同的scene
10. 通过同样的道理,可以自定义过渡的内容来创造自己的loading界面
11. 完结,在大佬们面前现眼了(鞠躬
暂无关于此日志的评论。