unity3d 用RawImage组件实现场景淡入淡出

效果:按下B键场景逐渐变黑,按下C键场景逐渐透明

  淡入淡出用于游戏开始、结束和场景过度。由UGUI的RawImage组件实现,思路是用代码改变RawImage的透明度,为节约开销,采用了委托的观察者模式,详细步骤如下:

1、在Hierachy面板中新建三个空物体,分别命名为UI_Manager、Fade和Test。

2、由于有外部物体引用UI_Manager,所以为UI_Manager添加Tag,Tag也命名为UI_Manager。

3、添加RawImage组件:一定要右键--UI--添加RawImage或者从菜单栏GamrObject处添加RawImage组件,而不能从component添加,添加完成后调整为如下图层级。

unity3d 用RawImage组件实现场景淡入淡出_第1张图片

4、添加脚本:FadeInOut.cs挂在RawImage上,FadeInOutControl.cs挂在UI_Manager上,testEvent.cs挂在临时测试的Test上。

5、由于U_Manager引用了U_Manager,且为内部引用,故将RawImage直接拖入U_Manager的FadeInOut兰中。

unity3d 用RawImage组件实现场景淡入淡出_第2张图片

为避免在编辑场景的时候中心总有个RawImage的黑块,影响编辑,故需将RawImage前面的√去掉,由代码在运行时激活。

unity3d 用RawImage组件实现场景淡入淡出_第3张图片

6、分别重置 UI_Manager、Cavas、dade和FadeRawImage的transform(即分别点transform-->reset)。

7、将RawImage的Color调整为黑色。

unity3d 用RawImage组件实现场景淡入淡出_第4张图片

测试:运行场景,按下B键屏幕逐渐变黑,按下C键逐渐透明则表示测试成功,很简单吧?

附三个代码如下:

1、FadeInOut.cs

/***************************场景淡入淡出******************************/

//用法:挂在RawImage组件上

//功能:场景淡入淡出

//注意:注意reset  RawImage的位置,否则可能无效果,一定要右键--UI--添加RawImage或者从菜单栏GamrObject处添加RawImage

//       组件,而不能从component添加。

//设计:闲云野鹤

//环境:vs2017.15.7.3  unity3d2018 1.5f1

//版本:1.0

//时间:2018.8.25

/***************************场景淡入淡出******************************/

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;//注意添加命名空间

using UnityEngine.UI;//注意添加RawImage命名空间

public class FadeInOut : MonoBehaviour

{

    public bool isBlack = false;//不透明状态

    public float fadeSpeed = 1;//透明度变化速率

    RawImage rawImage;

    void Start()

    {

        RectTransform rectTransform = GetComponent();

        rectTransform.sizeDelta = new Vector2(Screen.width, Screen.height);//使背景满屏

        rawImage = GetComponent();

        rawImage.color = Color.clear;

        // SceneManager.LoadScene("menu");//切换场景

    }

    void Update()

    {

        if (rawImage.color.a > 0.001f && isBlack == false)

            rawImage.color = Color.Lerp(rawImage.color, Color.clear, Time.deltaTime * fadeSpeed*0.5f);//渐亮

        if (rawImage.color.a <= 0.999f && isBlack == true)

            rawImage.color = Color.Lerp(rawImage.color, Color.black, Time.deltaTime * fadeSpeed);//渐暗

    }

}

2、FadeInOutControl.cs

/***************************控制场景淡入淡出******************************/

//用法:与FadeInOut脚本关联使用

//功能:控制FadeInOut淡入淡出脚本

//注意:无

//设计:闲云野鹤

//环境:vs2017.15.7.3  unity3d2018 1.5f1

//版本:1.0

//时间:2018.8.25

/***************************控制场景淡入淡出******************************/

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;//注意添加RawImage命名空间

public class FadeInOutControl : MonoBehaviour

{

    FadeInOut fadeInOut;

    public GameObject rawImage;

    void Start()

    {

        rawImage.SetActive(true);

        fadeInOut = rawImage.GetComponent();

    }

    public void BackGroundControl(bool b)

    {

        if (b == true)

            fadeInOut.isBlack = true;

        else

            fadeInOut.isBlack = false;

    }

}

3、testEvent.cs

/***************************监听场景淡入淡出事件******************************/

//用法:与FadeInOut脚本关联

//功能:监听淡入淡出事件

//注意:无

//设计:闲云野鹤

//环境:vs2017.15.7.3  unity3d2018 1.5f1

//版本:1.0

//时间:2018.8.25

/***************************监听场景淡入淡出事件******************************/

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class testEvent : MonoBehaviour {

   FadeInOutControl fadeInOutControl;

    delegate void  BackupGroundDelegate(bool b);//委托

    BackupGroundDelegate dele;

       void Start () {

        fadeInOutControl = GameObject.FindWithTag("UI_Manager").GetComponent();

        dele =fadeInOutControl.BackGroundControl;

       }

       void Update () {

        if (Input.GetKeyDown(KeyCode.B))//事件触发

            dele(true);

        if (Input.GetKeyDown(KeyCode.C))//事件触发

            dele(false);

    }

}

测试成功后删除Test物体。以后可在任何脚本中加入如下代码即可触发场景淡入淡出:

  delegate void  BackupGroundDelegate(bool b);//委托

       void Start () {

        fadeInOutControl = GameObject.FindWithTag("UI_Manager").GetComponent();

        dele =fadeInOutControl.BackGroundControl;

       }

...........dele(true);//淡出

...........dele(false);//淡入

 

你可能感兴趣的:(unity3d)