unity3d - 如何在 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;
}
}
我现在正在尝试做几件事:
- 如何为这个关闭设置动画?我在想栅栏“闪烁”(就像电影中停电时一样)。但是我该如何编程呢?我从来没有做过会暗示几个框架的东西?
- 我需要等待动画结束才能开始关闭下一个公园,如何做到这一点
解决方案
有两种方法可以做到这一点。第一个是使用协程,如果你想让它闪烁一小段时间:你可以这样做
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
如果您不喜欢代码方式,您还可以在每个公园中创建一个动画,当您按下记录时从精灵渲染器更改颜色时,它具有正常颜色的空闲状态和闪烁状态。然后通过代码,您可以启动该动画并在一段时间后返回空闲状态。
推荐阅读
- c# - 如何让我的 asp.netcore JsonResult 序列化到我的动作控制器内的主体,以便我可以捕获异常并计时其执行?
- c++ - 将字符串文字常量定义为 char const* 和 wchar const*
- django - --- 记录错误 --- Python 和 Django 2.2
- mysql - 了解 MySQL 中的死锁
- ruby-on-rails - 为什么在 Rails 中显示数据表中的数据时出现 ActiveModel::MissingAttributeError(即使查询在 pgadmin 中运行良好)?
- python - 在 plotly 热图中自定义排序 x 轴
- c++ - 创建一个函数来转换数组元素的类型并返回数组的地址
- paypal - Marketplace应用的支付网关方式
- c# - 通过 Api 层传输文件的有效方法 - C#
- angular - 带有嵌套休息调用的for循环后的Angular 6休息调用