Unity 启动画面淡入淡出

  前几天在玩我叫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

时间: 2024-08-28 14:50:33

Unity 启动画面淡入淡出的相关文章

Unity 阴影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的问题

由于Universal Render Pipeline目前(2020年4月1日)把阴影淡入淡出这个功能竟然给取消了…我自己拿片元位置到相机位置的距离进行了一个淡化,但是阴影边缘老是被裁切…后来研究了一下Unity里面这个CBuffer是干嘛的.有一些结论,鉴于似乎没搜到,就发个博客吧... 至于这些东西为啥是这样…,我也不知道...反正人家Unity就是这么干的 unity_ShadowFadeCenterAndType决定了阴影消散的中心:xyz保存的是camPos +  normalize(

Pyqt QSplashScreen启动画面

多大数应用程序启动时都会在程序完全启动时显示一个启动画面,在程序完全启动后消失.程序启动画面可以显示一些有关产品的信息,让用户在等待程序启动的同时了解有关产品的功能,也是一个宣传的方式.QSplashScreen类提供了在程序启动过程中显示的启动画面的功能当运行程序时,在显示屏的中央出现一个启动画面,经过一段时间,应用程序完成初始化工作后,启动画面隐去,出现程序的主窗口界面 SplashScreen.py 1 # -*- coding:utf8 -*- 2 from PyQt4 import Q

Unity3D 4.61 实现淡入淡出的场景过渡方法。

还在学习过程中,如果有大大看到请指点. 由于使用原本的Application.LoadLevel()函数可以直接加载场景. 但由于太过生硬,所以这里就做一个淡入淡出的效果来进行过渡. 一.思路: 只要在加载完成并切换完成之前,先黑屏,切换完成之后在在恢复就可以了. 1.创建一个遮罩. 颜色用黑色.#000 Alpha默认设置为0. 让遮罩层覆盖整个屏幕. 设置遮罩层不被销毁. 2.执行场景切换时,修改遮罩层的Alpha值,由透明修改成不透明. 注:在脚本里,Alpha值0是透明,1是不透明. 3

基于Android淡入淡出弹幕实现

最近遇到需求,需要在某张用户发表的图片中展示评论,方式是以淡入淡出的弹幕形式.需求为淡入事件t1->淡出t2,所有弹幕依次开始播放,中间一定的时间间隔deltaT.仔细考虑之后,想到以下实现方式,现总结下来并进行实现.分析以及比较. 不妨认定弹幕的画布为BarrageView:每条弹幕的绘制为BarrageItemView. 属性动画 从只有一条弹幕开始思考,我们需要设计一个属性动画,负责淡入: 在该动画的完成回调函数onAnimationEnd中启动淡出动画,在淡出动画的完成回调函数中,对该B

jQuery淡入淡出轮播图实现

大家好我是QD小白,这是人生第一次写博客,准备写的内容是Jquery淡入淡出轮播图实现,在此之前学习JS写的轮播图效果都感觉不怎么好,学习了jQuery里的淡入淡出效果后又写了一次轮播图效果明显感觉好了许多.现在我就来分享下自己写轮播图的思路和方法. HTML部分: <div id="img-box" style="width:700px; height:350px;"> <img style="opacity: 1;" wid

有关网页常见图片淡入淡出的效果的随笔

网页常见的图片淡入淡出的效果还是比较常见的,在这里,我个人来分享一些自己的一些笔记. <!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>淡入淡出图片效果图</title>    <style type="text/css">        #img1{ filter:alpha(opacity:30); o

Android App启动画面实现

app打开时都会有个启动画面(一幅图.一个提示之类的),画面停留2-3秒,然后结束掉自己,启动要呈现的第一个activity. Handler的postDelayed方法就很适合实现这个功能.它相当于一个定时器,可以使所在绑定了该handler的所在线程延时执行一段代码. postDelayed(Runnable r,long uptimeMillis); 第一个参数是要延时执行的代码段.第二个参数是要延长多少秒.     private Handler mHandler = new Handl

jQuery基础(动画篇 animate,显示隐藏,淡入淡出,下拉切换)

1.jQuery中隐藏元素的hide方法 让页面上的元素不可见,一般可以通过设置css的display为none属性.但是通过css直接修改是静态的布局,如果在代码执行的时候,一般是通过js控制元素的style属性,这里jQuery提供了一个快捷的方法.hide()来达到这个效果   $elem.hide() 提供参数: .hide( options ) 当提供hide方法一个参数时,.hide()就会成为一个动画方法..hide()方法将会匹配元素的宽度,高度,以及不透明度,同时进行动画操作

jQuery淡入淡出

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>淡入淡出</title> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script src=&q