Unity - 2D場景中使用ParticleSystem時,粒子被Sprite擋住的問題

  製作2D遊戲的時候免不了會想使用一些粒子系統,但是在某些狀況下使用的粒子系統發射的粒子會被2D的Sprite擋住無法呈現在Camera前面。基本上這只是2D的SortingLayer、SortingOrder造成的問題。


  如上圖來看,我原本打算要讓這個Sprite發射粒子,但是沒想通通都被Sprite擋住了,基本上問題就出在SpriteRenderer上,所以來看一下SpriteRenderer。


  在SortingLayer這邊我使用了自訂的一個Layer名稱Background而不是原本的Default,這個就是造成粒子被擋住的原因,如果你把Layer改為Default可以發現粒子又出現了。

  另外一個問題的可能就是Sorting Order,這邊的Order是0,但如果在Default的狀況下調整Order到1之類的,就會發現粒子又會被遮蔽。

  所以從這個狀況來看可以知道粒子系統噴出的粒子,所屬的Layer是Default以及Order是0,既然知道問題在哪要調整就簡單了,只要改變粒子系統的Sorting設定即可。

  但是ParticleSystem沒有可以調整SortingLayer或Order的地方,所以可以做個簡單的Component來解決這個問題。
  
CODE:
public int order;
public string layerName;
void Start()
{
    Component[] components = GetComponents(typeof(Component)); //取得物件上所有的Component當然也可以只取得ParticleSystem物件來設定
    foreach(Component component in components)
    {
        //調整所有Component的Sorting設定到自己想要的Layer跟Order
        component.renderer.sortingLayerName = layerName;
        component.renderer.sortingOrder = order;
    }
}


  之後把這個Component掛到有粒子系統的物件上,這樣就可以簡單調整粒子的Sorting設定了,也就可以避免粒子被2D的Sprite物件擋住的問題發生。

1 comment:

Post a Comment