Unity 启动画面淡入淡出
2015-05-24 14:35 wuzhang 阅读(9231) 评论(0) 编辑 收藏 举报前几天在玩我叫MT 2游戏的时候发现打开他们应用的时候发现他们Logo淡入淡出的效果做的挺好的,例如第一张是运营商腾讯的logo第二张是他们公司的游戏logo。我们也来模仿一下:
第一张图片:运营商的
这是第二张图片,游戏公司自己的。
1,新建测试工程。
脚本文件SplashScreen.cs
using UnityEngine; using System.Collections; public class SplashScreen : MonoBehaviour { //要加载的关卡 public string LevelToLoad="DiveUnityDemo"; //Logo贴图 public Texture2D SplashLogo; //渐入渐出速度 public float FadeSpeed=0.3F; //等待时间 public float WaitTime=0.5F; #region 渐入渐出的类型 public enum SplashType { LoadLevelThenFadeOut, FadeOutThenLoadLevel } public SplashType Type=SplashType.LoadLevelThenFadeOut; #endregion #region 渐入渐出的状态 public enum FadeStatus { FadeIn, FadeWait, FadeOut } private FadeStatus mStatus=FadeStatus.FadeIn; #endregion //是否允许玩家触发渐入渐出事件 public bool WaitForInput=true; //当前透明度 private float mAlpha=0.0F; //摄像机 private Camera mCam; private GameObject mCamObj; //Logo贴图位置 private Rect mSplashLogoPos; //渐入结束的时间 private float mFadeInFinishedTime; //关卡是否加载完毕 private bool LevelisLoaded=false; void Start () { //保存相机 mCam=Camera.main; mCamObj=Camera.main.gameObject; //计算Logo绘制的位置 mSplashLogoPos.x=(Screen.width * 0.5F-SplashLogo.width * 0.5F); mSplashLogoPos.y=(Screen.height * 0.5F-SplashLogo.height * 0.5F); mSplashLogoPos.width=SplashLogo.width; mSplashLogoPos.height=SplashLogo.height; //如果是渐出后加载关卡则保留相机 if (Type == SplashType.LoadLevelThenFadeOut) { DontDestroyOnLoad(this); DontDestroyOnLoad(Camera.main); } //检查目标关卡是否为空 if ((Application.levelCount <= 1) || (LevelToLoad == "")) { Debug.Log("There is not have the level to load please check again"); return; } } void Update () { switch(mStatus) { case FadeStatus.FadeIn: mAlpha+=FadeSpeed * Time.deltaTime; break; case FadeStatus.FadeOut: mAlpha-=FadeSpeed * Time.deltaTime; break; case FadeStatus.FadeWait: //当设定为FadeWait时可根据时间判定或者玩家触发进入下一个状态 if((!WaitForInput && Time.time>mFadeInFinishedTime+WaitTime) || (WaitForInput && Input.anyKey)) { mStatus=FadeStatus.FadeOut; } break; } } void OnGUI() { if(SplashLogo!=null) { //绘制Logo GUI.color=new Color(GUI.color.r,GUI.color.g,GUI.color.b,Mathf.Clamp(mAlpha,0,1)); GUI.DrawTexture(mSplashLogoPos,SplashLogo); //状态判断 if(mAlpha>1.0F) { mStatus=FadeStatus.FadeWait; mFadeInFinishedTime=Time.time; mAlpha=1.0F; //如果需要在渐入结束后加载关卡 if(Type==SplashType.LoadLevelThenFadeOut) { mCam.depth=-1000; } } if(mAlpha<0.0F) { //如果需要在关卡加载完后渐出 if(Type==SplashType.FadeOutThenLoadLevel) { Application.LoadLevel("sence2"); }else { Destroy(mCamObj); Destroy(this); } } } if(mStatus==FadeStatus.FadeWait) { mStatus = FadeStatus.FadeOut; StartCoroutine("loadSence2"); //Debug.Log("请按任意键继续"); } } public IEnumerator loadSence2() { yield return new WaitForSeconds(2f); Application.LoadLevel("sence2"); } void OnLevelWasLoaded(int index) { //如果目标关卡已加载需要手动销毁场景中的GUI和AudioListener if(LevelisLoaded) { Destroy(mCam.GetComponent<AudioListener>()); Destroy(mCam.GetComponent<GUILayer>()); } } }
将脚本挂到MainCamera上,添加图片即可!
运行效果:
源代码github连接:https://github.com/wuzhangwuzhang/test/tree/master/testFade