对于2D项目,我希望获得与Unity 5.2.0f3中的“陷后的季节”相同的效果:https://i.stack.imgur.com/WCIhs.gif
预告片https://www.youtube.com/watch?v=cmAWybFKNh8
我正试图以这种方式在Sprite Renderer中播放由着色器组成的材质:
spriteRenderer = background.GetComponentInChildren<SpriteRenderer>();
spriteRendererMaterial = Instantiate(spriteRenderer.sharedMaterial);
spriteRendererMaterial.SetFloat("Slider_Dissolve", 1.5f);
spriteRenderer.material = spriteRendererMaterial;
但是我想在图像中应用相同的材质,但是即使我在“项目视图”中看到正在更新的材质,也无法在启动游戏时使用。
在他们的论坛中也讨论了这个问题,但请注意,与https://forum.unity.com/threads/trying-to-animate-an-image-component-material-shader.265023/相比,我的任何组件中绝对没有遮罩:此处还讨论了该影响:季节变化显示影响
我对解决方案的需求不足,将不胜感激。
虽然有一个主题,但对我们有帮助:https://forum.unity.com/threads/material-isnt-updating-when-using-setfloat.530548/不幸的是,
下面是在单击按钮后要执行的协程:
IEnumerator WaitForInteractiveElementTransform(Animator animator)
{
if (animator != null)
{
while (animator.GetCurrentAnimatorStateInfo(0).length >
animator.GetCurrentAnimatorStateInfo(0).normalizedTime)
{
yield return null;
}
}
if (animatorBackground != null)
{
animatorBackground.SetBool("On", true);
}
else
{
P4.gameObject.SetActive(false);
P4Fantasy.gameObject.SetActive(true);
}
state = SceneState.Unreal;
StartCoroutine(SetMaterialFloatOverTime(spriteRendererMaterial, 1.5f, "Slider_Dissolve"));
private IEnumerator SetMaterialFloatOverTime(Material material, float
duration, string propertyName)
{
float timer = 0;
while (timer < duration)
{
material.SetFloat(propertyName, timer);
spriteRenderer.material = material;
timer += Time.deltaTime;
yield return null;
}
}
协程SetMaterialFloatOverTime更新weel Slider_Dissolve属性,但每次此属性值更改时,场景图像都不会刷新。
有什么想法吗?
答案 0 :(得分:0)
在我看来,它确实像是一个Unity错误。如果您将Image作为UI图像元素讨论,则可以使用另一种方法在不创建单个材质实例的情况下为其提供单个值。如果需要UI上的淡出效果,则在着色器中使用顶点颜色。更改UI元素的颜色时,Unity将该颜色作为顶点颜色发送。因此,尽管它们使用相同的材质,但RGBA值基本上可以用作4个滑块以实现各种效果。