ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

随机更改相机背景颜色

2019-11-10 21:05:18  阅读:332  来源: 互联网

标签:smoothing unity3d colors background-color c


我正在尝试在随机选择的两种颜色之间平滑更改相机的背景颜色.我已经实现了,但是随后我开始注意到,每当选择一种新颜色时都会出现闪光.我已经在link上上传了有关该问题的视频.这是我当前正在使用的脚本:

public Color color1;
public Color color2;

float time;
float time2;
float transition;

int firstColor = 0;


void Update()
{
    if (firstColor == 0)
    {
        color1 = Random.ColorHSV(Random.value, Random.value);
        color2 = Random.ColorHSV(Random.value, Random.value);

        firstColor = 1;
    }

    Camera.main.backgroundColor = Color.Lerp(color2, color1, transition);

    time += Time.deltaTime;
    time2 += Time.deltaTime;
    transition = time2 / 5;

    if (time > 5)
    {
        color2 = color1;
        color1 = Random.ColorHSV(Random.value, Random.value);

        time = 0;
        time2 = 0;
    }
}

很感谢任何形式的帮助.

解决方法:

您需要使用协程进行此操作.然后,您可以轻松地编程当前过渡结束后何时更改新颜色.任何您需要加班的事情,都应该始终考虑使用协程.它消除了很多布尔变量和混乱的需求.

您可以在没有布尔变量的协程函数中等待,但不能在诸如Update函数的void函数中等待.您已经在使用Time.deltaTime和Lerp函数,因此您知道自己在做一半.这是执行此操作的正确方法:

//2 seconds within each transition/Can change from the Editor
public float transitionTimeInSec = 2f;

private bool changingColor = false;

private Color color1;
private Color color2;


void Start()
{
    StartCoroutine(beginToChangeColor());
}

IEnumerator beginToChangeColor()
{
    Camera cam = Camera.main;
    color1 = Random.ColorHSV(Random.value, Random.value);
    color2 = Random.ColorHSV(Random.value, Random.value);

    while (true)
    {
        //Lerp Color and wait here until that's done
        yield return lerpColor(cam, color1, color2, transitionTimeInSec);

        //Generate new color
        color1 = cam.backgroundColor;
        color2 = Random.ColorHSV(Random.value, Random.value);
    }
}

IEnumerator lerpColor(Camera targetCamera, Color fromColor, Color toColor, float duration)
{
    if (changingColor)
    {
        yield break;
    }
    changingColor = true;
    float counter = 0;

    while (counter < duration)
    {
        counter += Time.deltaTime;

        float colorTime = counter / duration;
        Debug.Log(colorTime);

        //Change color
        targetCamera.backgroundColor = Color.Lerp(fromColor, toColor, counter / duration);
        //Wait for a frame
        yield return null;
    }
    changingColor = false;
}

标签:smoothing,unity3d,colors,background-color,c
来源: https://codeday.me/bug/20191110/2015257.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有