之前写过一篇博客是Image的淡入和淡出的效果
那个比较局限 调用时也不好调用
今天我给大家介绍一个我写好的一个方法
非常好调用 只用一句代码 不过前提是必须所有用到的场景中都要事先做一个Image
名字叫做BlackImage 我们待会会通过代码来查找到这个组件
我直接给出代码吧
public class BlackImages : MonoBehaviour, IPointerClickHandler
{
private Image BlackImageObject;
private float a = 0;
private float Blacktime;//(这个时间包括来回的时间)
private float Pausetime;//暂停的时间
private bool isStart=false;
private bool isDown = false;
private bool isPause = false;
public static BlackImages Instance;
private void Awake()
{
BlackImageObject = GameObject.Find("BlackImage").GetComponent<Image>();
Instance = this;
DontDestroyOnLoad(gameObject);
}
public void OnPointerClick(PointerEventData eventData)//接口
{
}
private void Update()
{
transform.SetAsLastSibling();//时刻处于canvas最底部(最先渲染出来)
Blacks();
}
public void Blacks()
{
if (isStart)
{
a += Time.deltaTime;
}
if (isDown)
{
a -= Time.deltaTime;
}
if (a > Blacktime / 2)
{
a = Blacktime / 2;
isStart = false;
StartCoroutine(delaystart());
}
if (a <= 0)
{
a = 0;
isDown = false;
isStart = false;
}
BlackImageObject.color = Color.Lerp(new Color(0, 0, 0, 0), Color.black, a / (Blacktime / 2));
}
private IEnumerator delaystart()
{
yield return new WaitForSeconds(Pausetime);
isDown = true;
}
public void startblack(float blacktime,float pausetime)
{
Blacktime = blacktime;
Pausetime = pausetime;
isStart = true;
}
}
我们在其他脚本使用的时候只需调用**startblack(float blacktime,float pausetime)**方法
其中第一个参数是总体的过度时间的 第二个是保持全黑的时间
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
BlackImages.Instance.startblack(6f,5f);
}
}
然后场景中我们事先要写一个Image
效果图我就懒得放了
我测试过了没毛病
希望这篇博文对大家有帮助
主页有我的联系方式 如果有问题或者是合作可以联系我(知无不答)