[Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39801917
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址blog.csdn.net/qinyuanpei。在非常多游戏开场的时候,都会有一个Logo渐入渐出的效果,如图是国产单机游戏《仙剑奇侠传五》的Logo展示。Logo从营销的角度来说它是一种品牌的树立,能够添加用户对于一个品牌的认知感。而作为游戏来说,Logo的设计不仅能够添加游戏产品的艺术感,更能够通过Logo设计中所表达的寓意来暗示或者是映射游戏世界中的某些东西。比方《古剑奇谭一》通过Logo中的文字表达的是琴心剑魄今何在这种感慨,而相应到游戏其中即使主人公百里屠苏和太子长琴的转世欧阳少恭,由此可见Logo的设计对于一款产品来说是至关重要,由于Logo传达出的东西应该就是这款产品真正想要表达的东西吧。好了,关于Logo我们先讨论到这里,今天我们就来一起实现Unity3D中Logo渐入渐出效果吧。
首先我们来讲述一下详细的原理吧,在Unity的GUI类中有一个Color类型的属性color,它表示的是全局的GUI染色,假设我们改变这个属性值,那么Unity场景中的背景和文本颜色都将发生改变。Color类型是典型的RGBA模式,即一个色彩值能够用Red、Green、Blue、Alpah这四个值来表示。通常情况下,这四个值是能够在0-255之间的不论什么一个数,这一点对于熟悉平面设计的朋友应该是非常熟悉的吧,而在Unity中,这四个值被限定在0-1之间,我们能够使用0-1之间的不论什么一个数来为它们赋值。这里我们重点要说的是Alpha,它是用来表示透明度的一个值,当该值为0时,表示全然透明,当该值为1时,表示全然不透明。在今天的这个实例中,我们就是通过对Alpah进行插值从而实现Logo的渐入渐出效果的。好了,以下我们来看代码:
/*************************************************************/
/* 本代码由SplashScreen改动而来,移除了源码中的LogoPositioning类型 */
/* 此次改动添加了当mStatus是FadeWait时对用户的提示,以Debug形式实现 */ using UnityEngine;
using System.Collections; public class SplashScript : MonoBehaviour { //要载入的关卡
public string LevelToLoad="";
//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;
Application.LoadLevel(LevelToLoad);
}
} if(mAlpha<0.0F)
{
//假设须要在关卡载入完后渐出
if(Type==SplashType.FadeOutThenLoadLevel)
{
Application.LoadLevel(LevelToLoad);
}else
{
Destroy(mCamObj);
Destroy(this);
}
}
} if(mStatus==FadeStatus.FadeWait)
{
Debug.Log("请按随意键继续");
}
} void OnLevelWasLoaded(int index)
{
//假设目标关卡已载入须要手动销毁场景中的GUI和AudioListener
if(LevelisLoaded)
{
Destroy(mCam.GetComponent<AudioListener>());
Destroy(mCam.GetComponent<GUILayer>());
}
} }
代码中给出了详尽的凝视,假设大家有明确的地方能够给我留言,谢谢大家,今天的内容就是这样了(十一没有回家,但是不知道为什么,感觉写代码的时候总是心有余而力不足啊,呵呵)。对了,博主的Github已经开通了,博主会将自己写得比較好的项目放到上面和大家分享,希望大家有时间的话就去看看吧,我的Github主页地址是https://github.com/qinyuanpei
最后大家一起来看看效果演示吧:
每日箴言:所谓爱,就是陪伴,没太多别的。——韩寒
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。
转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/39801917
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现的更多相关文章
- [整理]Unity3D游戏开发之Lua
原文1:[Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(上) 各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我地博客地址是blog.csdn.net/qinyuanpei.如果 ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘(下)
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
---------------------------------------------------------------------------------------------------- ...
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
---------------------------------------------------------------------------------------------------- ...
- Cocos2d-x 3.x游戏开发之旅
Cocos2d-x 3.x游戏开发之旅 钟迪龙 著 ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...
- 【转载】浅谈游戏开发之2D手游工具
浅谈游戏开发之2D手游工具 来源:http://www.gameres.com/459713.html 游戏程序 平台类型: iOS Android 程序设计: 其它 编程语言: 引擎/SDK ...
- Cocos2d—X游戏开发之CCToggle(菜单标签切换)CCControlSwitch(开关切换)
Cocos2d—X游戏开发之CCToggle(菜单标签切换) 首先继承子CCMenu,是菜单标签中的一种.‘ class CC_DLL CCMenuItemToggle : public CCMenu ...
- iOS游戏开发之UIDynamic
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 ...
- 在FL Studio中如何做出渐入的人声效果
当我们在拿到一段人声并想把它加入歌曲中时,如果我们发现人声没有渐入的效果,直接加入到歌曲里出现会变得很突兀的话,我们就需要用到这篇文章所介绍的方法,给人声加上一个渐入的效果. 1. 找到我们需要处理的 ...
随机推荐
- Java引进和应用的包装类
Java介绍包装类: 于Java它设计主张的想法,也就是说,一切都是对象.但是,我们知道,,Java数据类型分为基本数据类型和引用数据类型,但基本的数据怎么能成对象?为了解决这个问题,对需要8一个类的 ...
- 【Android先进】查看手机记忆库状态和应用方法
一世 我们知道.android程序存储器通常被限制16M.当然,24M的,和android程序存储器分为2部分:native和dalvik.dalvik 就是我们寻常说的java堆.我们创建的对象是在 ...
- 对于COM对象使用ComPtr代替传统指针
对于COM对象来说使用传统指针比较麻烦,还要记得Release()防止内存泄漏,一不小心就会出现各种各样的问题.针对这种问题微软提供了对于COM对象的智能指针ComPtr,这里是官方文档https:/ ...
- jQuery Validate插入 reomte使用详细的说明
在用户注冊时常常要通过ajax请求推断用户账号是否已注冊,最方便的方法便是用jQuery Validate插件 reomte方法 Jquery Validate插件, 调用远程方法验证參数, remo ...
- Android - match_parent 和 fill_parent差异
Android - match_parent 和 fill_parent差异 本文地址: http://blog.csdn.net/caroline_wendy match_parent 和 fill ...
- pdf转换为word小工具,挺好
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFwZW5nMDExMg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- String.format()【演示具体的例子来说明】
String.format()[演示样例具体解释] 整理者:Vashon 前言: String.format 作为文本处理工具.为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 Strin ...
- docker 真实---安装基本映像 (一)
浸泡了几天的官方网站,正确docker有了更好的理解.准备着手建立一个公司的开发和测试环境,包含java.python. 环境介绍 首先说明一下我的环境 2物理server(以后简称为主机) 主机A配 ...
- atitit.(设计模式1)--—职责链(chain of responsibility)最佳实践O7 转换日期
atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 能够选择的模式: 表格模式,责任链模式 1 3 ...
- 电脑知识--Windows一片
.com档 Dos可执行命令文件,一般小于64kb, .com文件包括程序的一个绝对映像.就是说,为了执行程序准确的处理器指令和内存中的数据.Ms-Dos通过直接把该映像从文件复制到内存. 而 载入. ...