Unity3d 如何制作统一颜色变化的动画?

Unity3d 如何制作统一颜色变化的动画?,unity3d,Unity3d,我是unity的初学者,所以请容忍我 在我的屏幕上,我看到了几个用电栅栏保护的公园。 每个公园都有不同的精灵,但除此之外,它们来自同一个预制场 有一件事,我需要关闭所有公园的电力。 目前,我有一个带有脚本的游戏对象,其中包含所有公园的列表。当事件发生时,它对每个公园调用一个方法。然后,每个停车场只需将其色调更改为“红色”,表示它们已关闭 我用一个简单的例子再现了这一点: public class Game : MonoBehaviour { [SerializeField] Park[

我是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;
    }
}
公共类公园:单一行为
{
公共空间关闭()
{
GetComponent().color=color.red;
}
}
我现在正试图做几件事:

  • 如何设置关闭的动画?我想到了栅栏在“闪烁”(就像电影里断电一样)。但是我该如何编程呢?我从来没有做过会暗示几帧的事情
  • 我需要等待动画结束后才能开始关闭下一个公园,如何做到这一点

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

    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
     }
    
    StartCoroutine(ColorBlinkMore(park[2], 0.1f, 15)) //this is going to make the park[2] blink and change color for 15 times
    

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

    您可以使用unity的动画编辑器随意创建动画,这样的编码方式并不总是最好的。对不起,我正处于unity冒险的开始阶段。我将看看动画编辑器。只是为了确定,我仍然能够从代码中触发这个动画?更改来自网络不必担心,是的,具有要触发的动画的对象将需要一个Animator组件,并且需要一个AnimationController,其中包含所有动画以及您希望在代码中使用的名称。一旦你有了动画师,你就可以从代码中调用它,就像
    Animator.Play(“AnimName”)在Asse商店中查看一个名为DOTween的软件包。@沉浸式似乎很棒,我不确定如何为每个公园创建一个“序列”,然后在游戏级别,等待序列完成以触发下一个?你知道我怎么做吗?嘿!谢谢你的回答!有没有一种方法可以在颜色的开和关之间进行调节?像立方体还是类似的?你可以使用Color.lerp,你可以从这个Unity中学到更多:谢谢,我已经把自己记录在了协同程序中,看起来不错!我将阅读你关于“Lerp”的链接,但有一个问题:我已经理解了如何拥有某种序列,允许我眨眼。我认为最好的地方是公园。但在“游戏”中,如何等待park 1的协同过程完成,然后再触发park 2的协同过程?关于Lerp:这意味着我必须“插入”自己的颜色?难道没有办法说我想在2秒钟内用立方宽松从蓝色变为红色吗?你可以使用我之前链接到你的文档(color.Lerp)从一种颜色变为另一种颜色,如果你想在一个之后运行一个协同程序,你可以在协同程序中使用bool控制系统或协同程序。我不太清楚你的比赛,所以是关于你的
    
    StartCoroutine(ColorBlinkMore(park[2], 0.1f, 15)) //this is going to make the park[2] blink and change color for 15 times