小编Den*_*nis的帖子

如何仅停止 Unity 中协程的某些实例

我正在制作一个 2d 游戏,我需要淡入和淡出一些元素。

IEnumerator FadeOut(Renderer rend, float speed)
    {
        while (rend.material.color.a > 0)
        {
            Color objectColor = rend.material.color;
            float fadeAmount = objectColor.a - (speed * Time.deltaTime);
            objectColor = new Color(objectColor.r, objectColor.g, objectColor.b, fadeAmount);
            rend.material.color = objectColor;
            yield return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的 FadeOut 协程(FadeIn脚本正是这个协程,但相反)。问题是它会出现错误。例如,如果我多次进入和退出需要淡出的区域,则整个游戏只会混合黑色(或太亮)。我通过使用StopAllCoroutines函数解决了这个问题。协程调用之一:

StopAllCoroutines();
StartCoroutine(FadeOut(tilemap,1f));
Run Code Online (Sandbox Code Playgroud)

我宁愿不使用 StopAllCoroutines,因为我在同一游戏中使用多个协程,进入淡入淡出区域只会关闭一半的系统。

我尝试使用StopCoroutine("name")(但据我所知,它与较新版本的 unity 不兼容)。我还在 StackOverflow 上找到了另一个帖子

来自线程的代码:

routines[col] = StartCoroutine((DamageEverySecond(health, damageRate)));
[...]
StopCoroutine(routine);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并不能解决我的问题,因为有多个实例同时运行。

我怎么解决这个问题?

c# coroutine unity-game-engine

-1
推荐指数
1
解决办法
1462
查看次数

标签 统计

c# ×1

coroutine ×1

unity-game-engine ×1