【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)
Unity的渲染層級(layer),決定了2D游戲的渲染順序,值越大的層級越后渲染,因渲染層級大的物體會覆蓋渲染層級小的物體。在Sprite Renderer中,分為Sorting Layer和Order in Layer,通過這兩個屬性可以設置物體的渲染層級。
然而在2D游戲中,常常會有角色一會兒跑到物體前,一會兒跑到物體后面的情況,如下圖。
如果只設置物體的Layer,無法實現正確的遮擋關系,會產生這種情況:
這里介紹一種引擎自帶方法,通過在unity中設置自定義軸向控制精靈的渲染。
在Edit->Project Settings->Graphics中,找到Camera Settings(攝像機渲染設置),將Transparency Sort Mode(透明度排序模式)設置為Custom Axis,即根據自定義的軸向進行渲染?!就该鞫扰判蚰J绞怯脕頉Q定sprite精靈的繪制順序的】
由于2D的遮擋關系常常是由y軸確定的,越往上越會被覆蓋,所以將Transparency Sort Axis中的y設為1,其余設置為0。
完成上述設置后的效果如下,此時已經有初步的遮擋效果,但可以看出現在比較的是游戲物體中心(Center)的y值,而要比較的其實是物體底部的y值,因此我們要更改物體的軸心。
?在物體的SpriteRanderer中找到Sprite Sort Point(精靈渲染順序點),在默認情況下是物體的中心點(Center),這里需要選擇的是軸心點,即物體以此為支點旋轉的點Pivot。
?之后找到游戲物體對應的圖片,將軸心點設置在物體的最底端Bottom或自定義Custom。
之后再根據實際需要,給物體加上碰撞就大功告成啦~
【ps:還有一種通過代碼直接修改物體的Layer的方式,如下:】
void Update() {if (player.position.y > tree.position.y){player.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;}if (player.position.y < tree.position.y){player.transform.GetComponent<SpriteRenderer>().sortingOrder = 1;tree.transform.GetComponent<SpriteRenderer>().sortingOrder = 2;} } //通過“游戲對象.transform.GetComponent<SpriteRenderer>().sortingOrder”可以直接修改層級總結
以上是生活随笔為你收集整理的【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue.js教程
- 下一篇: thinksnsv4 php7,社交系统