【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)
Unity的渲染層級(jí)(layer),決定了2D游戲的渲染順序,值越大的層級(jí)越后渲染,因渲染層級(jí)大的物體會(huì)覆蓋渲染層級(jí)小的物體。在Sprite Renderer中,分為Sorting Layer和Order in Layer,通過這兩個(gè)屬性可以設(shè)置物體的渲染層級(jí)。
然而在2D游戲中,常常會(huì)有角色一會(huì)兒跑到物體前,一會(huì)兒跑到物體后面的情況,如下圖。
如果只設(shè)置物體的Layer,無法實(shí)現(xiàn)正確的遮擋關(guān)系,會(huì)產(chǎn)生這種情況:
這里介紹一種引擎自帶方法,通過在unity中設(shè)置自定義軸向控制精靈的渲染。
在Edit->Project Settings->Graphics中,找到Camera Settings(攝像機(jī)渲染設(shè)置),將Transparency Sort Mode(透明度排序模式)設(shè)置為Custom Axis,即根據(jù)自定義的軸向進(jìn)行渲染。【透明度排序模式是用來決定sprite精靈的繪制順序的】
由于2D的遮擋關(guān)系常常是由y軸確定的,越往上越會(huì)被覆蓋,所以將Transparency Sort Axis中的y設(shè)為1,其余設(shè)置為0。
完成上述設(shè)置后的效果如下,此時(shí)已經(jīng)有初步的遮擋效果,但可以看出現(xiàn)在比較的是游戲物體中心(Center)的y值,而要比較的其實(shí)是物體底部的y值,因此我們要更改物體的軸心。
?在物體的SpriteRanderer中找到Sprite Sort Point(精靈渲染順序點(diǎn)),在默認(rèn)情況下是物體的中心點(diǎn)(Center),這里需要選擇的是軸心點(diǎn),即物體以此為支點(diǎn)旋轉(zhuǎn)的點(diǎn)Pivot。
?之后找到游戲物體對(duì)應(yīng)的圖片,將軸心點(diǎn)設(shè)置在物體的最底端Bottom或自定義Custom。
之后再根據(jù)實(shí)際需要,給物體加上碰撞就大功告成啦~
【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;} } //通過“游戲?qū)ο?transform.GetComponent<SpriteRenderer>().sortingOrder”可以直接修改層級(jí)總結(jié)
以上是生活随笔為你收集整理的【Unity2D游戏】实现实时的正确的遮挡关系(引擎自带功能)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue.js教程
- 下一篇: Excel使用技巧总结二