两次设置着色器属性(Propertyblock)(使用Lerp淡出颜色并将其重置为原始颜色)

问题描述 投票:0回答:1

我正在尝试制作“湿脚印”,但是在重用该步骤时遇到了一些褪色和将其重置为初始颜色的问题。我有一个带有几个足迹游戏对象的gameObject数组,当它们接触地面时,它们被放置在玩家脚的位置。目前它正在集中这些步骤,一切正常。因为我想使其尽可能轻巧,所以我使用了带有属性块的贴花着色器,并且在放置对象时需要淡出_MainColor属性,并且在不同位置再次使用同一对象时,需要重置。问题是,在当前设置中褪色无法正常工作。当前发生的情况是,当重新使用颜色时,其颜色将重置为黑色,并且应该再次进行淡入淡出操作,但它会立即再次透明。

void Update()
    {
        if (lastPos != transform.position)
        {
            stepPositioner = true;
            lastPos = transform.position;
            //Debug.Log("This Go changed position: ", this);
        }

        if (stepPositioner)
        {
            StartCoroutine(FadeTimer());
        }
    }

    IEnumerator FadeTimer()
    {
        _renderer.GetPropertyBlock(_propertyBlock);
        _propertyBlock.SetColor("_MainColor", startColor);
        _renderer.SetPropertyBlock(_propertyBlock);

        yield return new WaitForSeconds(1);

        _renderer.GetPropertyBlock(_propertyBlock);
        _propertyBlock.SetColor("_MainColor", Color.Lerp(startColor, endColor, Time.time * .5f));
        _renderer.SetPropertyBlock(_propertyBlock);
        stepPositioner = false;
    }
c# unity3d shader
1个回答
0
投票

不是Lerp的工作方式。

用于使颜色在一秒钟内淡出

IEnumerator FadeTimer()
{
    _renderer.GetPropertyBlock(_propertyBlock);
    _propertyBlock.SetColor("_MainColor", startColor);
    _renderer.SetPropertyBlock(_propertyBlock);

    var timePassed = 0f;
    while (timePassed < 1)
    {
        _renderer.GetPropertyBlock(_propertyBlock);
        _propertyBlock.SetColor("_MainColor", Color.Lerp(startColor, endColor, timePassed));
        _renderer.SetPropertyBlock(_propertyBlock);
        timePassed += Mathf.Min(Time.deltaTime, 1-timePassed);
        yield return null;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.