簡體   English   中英

統一淡化視差層

[英]Fade out parallax layer in unity

我在視差圖層上做了淡入淡出的效果,我做到了:

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設備上正常工作...

兒童中最大的spriterenderer數量為20個左右。

好了,有些技巧可能對您有幫助

  1. 如果需要,請使用對象池,因為您不必一次又一次銷毀和實例化雲。
  2. 嘗試避免Foreach循環,目前尚不明顯,但確實會對for循環產生影響。

如果用於每個循環的對象用於集合或對象數組(即除原始數據類型之外的所有元素的數組),則在每個循環的結尾處調用GC(垃圾收集器)以釋放參考變量的空間。

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
}

您可以嘗試合並Gameobjects。 只需激活即可停用它們。

如果一個雲是100%透明的,則可以將其停用並在其他地方重用。 如果您正在移動雲層,那應該是可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM