Unity 启动画面淡入淡出

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>());
    }
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值