我正在尝试制作“湿脚印”,但是在重用该步骤时遇到了一些褪色和将其重置为初始颜色的问题。我有一个带有几个足迹游戏对象的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;
}
不是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;
}
}