关闭

Unity 启动画面淡入淡出

1566人阅读 评论(0) 收藏 举报
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
查看评论

【Unity】自定义过场动画Splash Image

iOS How do I make a splash screen? 如何制作启动画面? As part of your game publishing process, you may want to customize the splash screen that appears when...
  • sinat_20559947
  • sinat_20559947
  • 2015-11-10 09:45
  • 13225

[Unity3d]Player Settings导出设置

[Unity3d]Player Settings导出设置 分类: Unity3D2013-12-22 14:25 413人阅读 评论(0) 收藏 举报 目录(?)[+] Player Settings...
  • Highning0007
  • Highning0007
  • 2014-07-20 13:16
  • 80905

Unity Splash Image 为何修改不了

我用的unity版本是: 之前我用的unity版本号也是unity5.3.5f1,就可以修改Splash Image,因为此此次由于重装系统,unity软件重装一下,就出现这个问题重装电脑前是可以修改Splash Image的,现在修改不了,原因是我重装了Unity,现在发布出来后,开机会带Un...
  • qq_15267341
  • qq_15267341
  • 2016-11-24 15:20
  • 3076

unity3d缩短splash screen的时间

在unity3d中,splash screen的显示时间是由加载第一个场景(Build Setting中的0号)里面的资源的速度决定的,因此,如果要缩短splash screen的时间,我们能做的就是在0号场景中尽可能的少用资源。可以借鉴的方式如下 1、在0号场景中放置一个empty game o...
  • TinyHum
  • TinyHum
  • 2014-04-04 09:35
  • 3874

Unity切换场景淡入淡出效果

在制作游戏时,我们在切换场景时经常需要增加一个淡入淡出的效果。这里,我们利用Unity自带的动画系统制作一个场景的淡入淡出的效果。步骤如下: 1.在游戏中新建一个游戏对象,给游戏添加一个GUITexture组件,并设置好相关的参数后,制作成prefab。如下图:![这里写图片描述](http://i...
  • q568360447
  • q568360447
  • 2017-05-03 16:54
  • 2016

Unity3D里的镜头实现淡入淡出用Color.color方法的实现

要实现一个出场淡入淡出的效果不用NGUI的效果,也不用GUI的效果,用这个Color.color的方法;这个方法如下图:最后一个float a 是指Alpha 为了看到实际的应用看下图;alpha最初定义为0.5f,然后写个计时器,在update里的黄线那句就实现了。(注明:whiteS...
  • alayeshi
  • alayeshi
  • 2015-03-26 11:01
  • 3396

Unity3d淡入淡出效果

  • 2013-12-28 17:02
  • 2.09MB
  • 下载

Unity 启动画面淡入淡出

我是代码的搬运工QAQ http://www.cnblogs.com/wuzhang/p/wuzhang20150524.html using UnityEngine; using System.Collections;public class SplashScreen : MonoBehavi...
  • u013452440
  • u013452440
  • 2017-04-27 12:24
  • 340

Unity 实现背景图片淡入淡出

如题。 背景是两个图片, 每隔一段时间  图片1 淡出,2 淡入, 然后2淡出,1 淡入 很简单   首先Unity建立两个 image1, image2.  image1 在上面显示 然后  我们设置 image1 的透明度, 就是1 ...
  • liuyanlei1990
  • liuyanlei1990
  • 2017-06-03 17:28
  • 957

Unity切换场景淡入淡出

using UnityEngine; using System.Collections; /* * 使用方法:将该脚本附在镜头下面,然后切换场景时镜头不销毁 * 要调用的时候获得该脚本,然后调用StartSplash() */ //@author joi public cl...
  • m0_37283423
  • m0_37283423
  • 2017-06-13 15:40
  • 490
    个人资料
    • 访问:36039次
    • 积分:425
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:40篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档