首页 / UNITY / 浅谈Unity淡入淡出的效果的实现
浅谈Unity淡入淡出的效果的实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了浅谈Unity淡入淡出的效果的实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5576字,纯文字阅读大概需要8分钟。
内容图文
Unity淡入淡出的效果的实现
前言:在我们的许多的游戏中,我们在游戏的开始的时候会有一个淡入的效果(场景由黑逐渐变清晰),当我们切换场景的时候(会由清晰逐渐的变黑的一个过程).
自己的思考:因为我们在许多的游戏中都有可能用到我们的淡入淡出的效果,所有就可以把它封装成一个类,每次当我们需要用到的时候,就可以直接拿来用了,这也体现我们我们c#的封装的特性。
实现的思路:
一.因为当我们封装好一个类的时候,那么我们 考虑如何会调用它呢??这时候我们会考虑使用单例模式。
单例模式的实现思路:
(1):我们使用静态字段来模拟全局变量。
(2):构造函数的私有化,因为我们不允许 别人通过使用new的关键字来创建类的实例,这也就保证了我们当前类只能有一个实例,来避免一些不必要的麻烦。
(3):得到实例。
单例模式的具体的实现:
1 // 设置静态的字段来模拟全局的变量(开始为空) 2 private static SceneFadeInAndOut _instance = null; 3///<summary> 4/// 只读属性的设置(得到实例) 5///</summary> 6publicstatic SceneFadeInAndOut Instance 7 { 8get 9 { 10//如果一开始的为空的话11if (_instance == null) 12 { 13//进行类的实例化的操作14 _instance = new SceneFadeInAndOut(); 15 } 16//下一个访问的话_instance就不为空直接返回字段17return _instance; 18 } 19 } 20//构造函数的私有化21private SceneFadeInAndOut() { }
二:好的,当我们写完单例模式的时候,接下来要考虑显示的事情了,我们需要时候来进行显示呢???我们需要使用UGUI的RawImage组件,来控制Color来控制淡入淡出效果。
请看截图:
代码如下:
1 // RawImage对象 2 public GameObject goRawImage; 3 // RawImage组件 4 private RawImage _rawImage; 5 void Awake() 6 { 7 // 如果goRawImage不为空的话 8 if (goRawImage) 9 { 10 // 得到RawImage组件 11 _rawImage = goRawImage.GetComponent<RawImage>(); 12 } 13 }
三:这时候需要控制组件来实现屏幕的淡入和淡出了。(颜色插值API自补)。
方法为私有的,因为我们不要再别的类中调用,只在类中自己使用。
代码实现如下:
1 // 渐变的速率 2 public float floatColorChangeSpeed = 1f; 3///<summary> 4/// 屏幕逐渐清晰(淡入) 5///</summary> 6privatevoid FadeToClear() 7 { 8//插值运算 9 _rawImage.color = Color.Lerp(_rawImage.color, Color.clear, floatColorChangeSpeed * Time.deltaTime); 10 } 1112///<summary>13/// 屏幕逐渐暗淡(淡出) 14///</summary>15privatevoid FadeToBlack() 16 { 17//插值运算18 _rawImage.color = Color.Lerp(_rawImage.color, Color.black, floatColorChangeSpeed * Time.deltaTime); 19 } 2021///<summary>22/// 屏幕的淡入 23///</summary>24privatevoid SceneToClear() 25 { 26 FadeToClear(); 27//当我们的a值小于等于0.05f的时候 就相当于完全透明了28if (_rawImage.color.a <= 0.05f) 29 { 30//设置为完全透明31 _rawImage.color = Color.clear; 32//组件的开关设置为关闭的状态33 _rawImage.enabled = false; 34//布尔条件设置为false35 _isSceneToClear = false; 36 } 37 } 3839///<summary>40/// 屏幕的淡出 41///</summary>42privatevoid SceneToBlack() 43 { 44//组件的打开45 _rawImage.enabled = true; 46 FadeToBlack(); 47//当前的阿尔法值大于0.95f的时候 表示已经接近于完全不透明的状态48if (_rawImage.color.a >= 0.95f) 49 { 50//设置为完全不透明的状态 51 _rawImage.color = Color.black; 52//布尔条件当到达指定的阿尔法值得时候设置为false53 _isSceneToBlack = false; 54 } 55 }
四:那我们就接下来考虑如何调用淡入的方法 如何调用淡出的方法???
1.设置两个布尔类型的条件,屏幕是否需要逐渐变清晰 屏幕是否需要变暗淡。
2.编写两个公共的方法,当场景需要淡入的时候 分别的设置布尔条件就可以了。
3.这样就可以子啊Update里面进行调用了。
代码实现如下:
1 // 屏幕是否要逐渐清晰(默认是需要的) 2 private bool _isSceneToClear = true; 3//屏幕是否需要逐渐变暗(默认是不需要的) 4privatebool _isSceneToBlack = false; 5void Update() 6 { 7if (_isSceneToClear) 8 { 9 SceneToClear(); 10 } 11elseif (_isSceneToBlack) 12 { 13 SceneToBlack(); 14 } 15 } 16///<summary>17/// 设置场景的淡入 18///</summary>19publicvoid SetSceneToClear() 20 { 21 _isSceneToClear = true; 22 _isSceneToBlack = false; 23 } 2425///<summary>26/// 设置场景的淡出 27///</summary>28publicvoid SetSceneToBlack() 29 { 30 _isSceneToClear = false; 31 _isSceneToBlack = true; 32 }
全部代码实现如下:
/* * * Title:"":项目 * 主题 : * Description: * 功能:场景的淡入淡出的效果 * Date:2017.10.12 * Version:Unity5.5.4 * Modify Recoder: * Operator: * * */ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Gnome { public class SceneFadeInAndOut : MonoBehaviour { #region 单例模式 //设置静态的字段来模拟全局的变量(开始为空)privatestatic SceneFadeInAndOut _instance = null; ///<summary>/// 只读属性的设置 ///</summary>publicstatic SceneFadeInAndOut Instance { get { //如果一开始的为空的话if (_instance == null) { //进行类的实例化的操作 _instance = new SceneFadeInAndOut(); } //下一个访问的话_instance就不为空直接返回字段return _instance; } } private SceneFadeInAndOut() { } #endregion#region 字段和属性的定义 //渐变的速率publicfloat floatColorChangeSpeed = 1f; //RawImage对象public GameObject goRawImage; //RawImage组件private RawImage _rawImage; //屏幕是否要逐渐清晰(默认是需要的)privatebool _isSceneToClear = true; //屏幕是否需要逐渐变暗(默认是不需要的)privatebool _isSceneToBlack = false; #endregionvoid Awake() { //如果goRawImage不为空的话if (goRawImage) { //得到RawImage组件 _rawImage = goRawImage.GetComponent<RawImage>(); } } void Update() { if (_isSceneToClear) { SceneToClear(); } elseif (_isSceneToBlack) { SceneToBlack(); } } #region 公共方法的定义 ///<summary>/// 设置场景的淡入 ///</summary>publicvoid SetSceneToClear() { _isSceneToClear = true; _isSceneToBlack = false; } ///<summary>/// 设置场景的淡出 ///</summary>publicvoid SetSceneToBlack() { _isSceneToClear = false; _isSceneToBlack = true; } #endregion#region 私有方法的定义 ///<summary>/// 屏幕逐渐清晰(淡入) ///</summary>privatevoid FadeToClear() { //插值运算 _rawImage.color = Color.Lerp(_rawImage.color, Color.clear, floatColorChangeSpeed * Time.deltaTime); } ///<summary>/// 屏幕逐渐暗淡(淡出) ///</summary>privatevoid FadeToBlack() { //插值运算 _rawImage.color = Color.Lerp(_rawImage.color, Color.black, floatColorChangeSpeed * Time.deltaTime); } ///<summary>/// 屏幕的淡入 ///</summary>privatevoid SceneToClear() { FadeToClear(); //当我们的a值小于等于0.05f的时候 就相当于完全透明了if (_rawImage.color.a <= 0.05f) { //设置为完全透明 _rawImage.color = Color.clear; //组件的开关设置为关闭的状态 _rawImage.enabled = false; //布尔条件设置为false _isSceneToClear = false; } } ///<summary>/// 屏幕的淡出 ///</summary>privatevoid SceneToBlack() { //组件的打开 _rawImage.enabled = true; FadeToBlack(); //当前的阿尔法值大于0.95f的时候 表示已经接近于完全不透明的状态if (_rawImage.color.a >= 0.95f) { //设置为完全不透明的状态 _rawImage.color = Color.black; //布尔条件当到达指定的阿尔法值得时候设置为false _isSceneToBlack = false; } } #endregion }//class_end }
五:这样就可以在别的脚本上进行调用了。
原文:http://www.cnblogs.com/MoRanQianXiao/p/7691790.html
内容总结
以上是互联网集市为您收集整理的浅谈Unity淡入淡出的效果的实现全部内容,希望文章能够帮你解决浅谈Unity淡入淡出的效果的实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。