关闭

Unity 启动画面淡入淡出

2807人阅读 评论(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

 

0
0
查看评论

Unity发布之去掉启动画面

File>>Build Settings...>>Player Settings...>>Splash Image>>不勾选Show Unity Splash Screen
  • u011704031
  • u011704031
  • 2017-01-05 08:49
  • 4434

Unity3D游戏开发之“重写Unity Android Splash,实现启动无黑屏”

转自:http://www.manew.com/thread-98428-1-1.html Splash设置相信搞unity的朋友都知道这个东西,就是游戏启动的时候的启动画面,在unity中如果不设置splash的话我们就能够看到unity游戏启动的时候就会出现一张unity默认的带有Unity...
  • a1047120490
  • a1047120490
  • 2016-12-22 14:51
  • 3520

添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)

添加启动游戏过渡场景Default Splash Scene(Unity3D开发之十三)Unity5个人版会添加Unity Logo作为启动画面,咱们既然没花钱,打个广告也应该。但Unity Logo结束后可以再添加一个自己的启动画面。下面是添加一个简单的FadeIn->FadeOut过渡场景...
  • yanghuiliu
  • yanghuiliu
  • 2015-03-06 14:18
  • 5165

【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
  • 13257

Unity_2D游戏实例从零讲起(2)——手游开场动画的实现

一个酷炫的开场动画多多少少可以让游戏高大上起来(对于外行来说…)不管怎么说,我们发现基本上任何一款游戏都有自己独特的开场动画用来显示自己的品牌logo。所以 接着我们上次教程,开始和大家分享如何制作出手游的开场动画。主要有以下内容: a.安卓Apk文件的发布生成 b.如何在安卓平台播放视频 c.基本...
  • u012999985
  • u012999985
  • 2016-01-10 19:48
  • 2486

Unity Splash Image 与 Launch场景的背景图无缝衔接

注:unity版本5.2.2f1.一、for android1、图片的导入设置,确保图片的实际尺寸不被改变。Texture Type: 没有能设置成Texture, 因为它的改变图片的实际尺寸。这点其实你可只要将Texture Type切换成Advanced类型。看看其中的Non Power of ...
  • AnYuanLzh
  • AnYuanLzh
  • 2015-12-04 16:12
  • 5844

unity项目去除unity开始动画和发布设置

Unity 工程发布设置,主要有去除官方开始动画,窗口拖动,分辨率,图标等内容。
  • u010989951
  • u010989951
  • 2016-08-05 16:36
  • 7797

unity3d缩短splash screen的时间

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

Unity 每次启动都进入默认启动界面

Unity 每次启动都进入默认启动界面 可以作如下修改: Editor/Preferences.../ General/Always Show Project Wizard  (第二个选项)
  • i1tws
  • i1tws
  • 2016-03-25 12:50
  • 366

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
    个人资料
    • 访问:36439次
    • 积分:430
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:40篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档