统一淡化视差层

时间:2019-06-01 19:01:29

标签: c# unity3d

我在视差层上做了淡入淡出的效果,我做到了:

if(currentBackgroundPhase == BackgroundPhase.Night)
{
    foreach(SpriteRenderer sprite in GetComponentsInChildren<SpriteRenderer>())
    {
        if (sprite.name.Contains("Cloud"))
        {
            sprite.color = new Color(opaqueCloud.r, opaqueCloud.g, opaqueCloud.b, transitionTimeElapsed / TRANSITION_TIME);
        }
    }
}

视差不断产生和破坏云精灵,这是我想到的唯一方法。 我看了探查器,并没有发现调用if时性能下降。 是否因为GetComponensInChildren太昂贵/效率低下?如果是这样,还有其他方法吗?

我查看了事件探查器的脚本图​​形,看是否过多,但没有发现任何奇怪的地方。

我无法在不良设备上进行测试,因为我没有这样的设备,并且我希望它能在每台Android设备上正常工作...

儿童中最多可以有20个左右的spriterenderer。

2 个答案:

答案 0 :(得分:1)

有些提示可能对您有帮助

  1. 如有必要,请使用对象池,因为您不必一次又一次地破坏和实例化云。
  2. 尝试避免Foreach循环目前尚不明显,但确实会影响for循环。

如果用于每个循环的a用于收集对象或对象数组(即除原始数据类型以外的所有元素的数组),则在每个循环a的末尾调用GC(垃圾收集器)以释放参考变量的空间。 / p>

foreach (Gameobject obj in Collection)
{
    //Code Do Task
}

其中,for循环用于使用索引对元素进行迭代,因此与非原始数据类型相比,原始数据类型将不会影响性能。

for (int i = 0; i < Collection.length; i++){
    //Get reference using index i;
    //Code Do Task
}

答案 1 :(得分:0)

您可以尝试合并游戏对象。只需激活即可停用它们。

如果一个云是100%透明的,则可以将其停用并在其他地方重用。如果您要移动云层,应该可以。