【发布时间】:2019-03-08 19:02:12
【问题描述】:
我想在 Unity 5.2.0f3 中为 2D 项目获得与 Seasons After Fall 相同的效果: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/ 相比,我的任何组件中都绝对没有遮罩@ 此处还讨论了该效果:Season Change Reveal Effect
我的解决方案不足,我们将不胜感激。
这里有一个我们认为会有所帮助的主题: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 属性,但每次该属性值更改时,场景上的图像都不会刷新。
有什么想法吗?
【问题讨论】: