首页 > 解决方案 > 如何在 Unity 中制作具有颜色变化的动画?

问题描述

我是团结的初学者,所以请耐心等待。

在我的屏幕上,我有几个用电子围栏守卫的公园实例。每个公园都有不同的精灵,但除此之外,它们来自同一个预制件。

在一个事件中,我需要关闭所有公园的电力。目前,我有一个带有脚本的游戏对象,其中包含所有公园的列表。当事件发生时,它会在每个公园调用一个方法。然后每个公园只需将其色调更改为“红色”,表示它们已关闭。

我在一个最小的例子中复制了这个:

public class Game : MonoBehaviour
{

    [SerializeField] Park[] Parks;


    public void ShutdownEverything()
    {
        foreach (Park park in Parks)
        {
            park.Shutdown();
        }
    }
}

和我的公园:

public class Park : MonoBehaviour
{

    public void Shutdown()
    {
        GetComponent<SpriteRenderer>().color = Color.red;
    }
}

我现在正在尝试做几件事:

  1. 如何为这个关闭设置动画?我在想栅栏“闪烁”(就像电影中停电时一样)。但是我该如何编程呢?我从来没有做过会暗示几个框架的东西?
  2. 我需要等待动画结束才能开始关闭下一个公园,如何做到这一点

标签: unity3d

解决方案


有两种方法可以做到这一点。第一个是使用协程,如果你想让它闪烁一小段时间:你可以这样做

IENumerator ColorBlink(GameObject park, float TimeToBlink)
 { 
      park.GetComponent<SpriteRenderer>().color = Color.red;
      yield return new WaitForSeconds(TimeToBlink);
      park.GetComponent<SpriteRenderer>().color = Color.blue; //or any default
       // and you can do it the times you want
 }

如果您希望它玩很多时间,我还建议更改该协程:

IENumerator ColorBlinkMore(GameObject park, float TimeToBlink,int timeBlinked)
 { 
      for(int i = 0; i <= timeBlinked; i++)
     {  
      park.GetComponent<SpriteRenderer>().color = Color.red;
      yield return new WaitForSeconds(TimeToBlink);
      park.GetComponent<SpriteRenderer>().color = Color.blue; //or any default
     } //it is going to blink for timeBlinked times
 }

记得这样调用这个协程

StartCoroutine(ColorBlinkMore(park[2], 0.1f, 15)) //this is going to make the park[2] blink and change color for 15 times

如果您不喜欢代码方式,您还可以在每个公园中创建一个动画,当您按下记录时从精灵渲染器更改颜色时,它具有正常颜色的空闲状态和闪烁状态。然后通过代码,您可以启动该动画并在一段时间后返回空闲状态。


推荐阅读