前几天在玩我叫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 <= ) || (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,,));
GUI.DrawTexture(mSplashLogoPos,SplashLogo); //状态判断
if(mAlpha>1.0F)
{
mStatus=FadeStatus.FadeWait;
mFadeInFinishedTime=Time.time;
mAlpha=1.0F;
//如果需要在渐入结束后加载关卡
if(Type==SplashType.LoadLevelThenFadeOut)
{
mCam.depth=-; }
} 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