Unity3D界面與2D界面的結合
在本項目中,充分利用了3D與2D的結合來制作用戶界面,使得3D界面的透視性更強。但是有些UI必須沒有透視,所以需要采用正交和非正交相結合的方式。3D界面有兩種方式。第一個需要屏幕調整,另一個不需要屏幕調整。讓我調用第一個偽3D接口和第二個真3D接口。
假3D界面的效果是,Image具有透視關系,旋轉后有近大遠小的效果,而且還能與屏幕進行自適應,做法很容易直接將Camera改成頭攝像機就可以。
此時對Image進行旋轉就會有透視關系,而且還能與屏幕自適應。
現在的問題是,如果場景有一個3D模型,比如在模型上面畫一張圖片,那么圖片和模型也需要有透視關系。在這個時候,使用偽3D界面是不好的,因為圖片自適應后,它不能匹配模型的位置。這時,我們需要引入一種新的方法,純三維界面。
為了讓Image和3D物體坐標單位統一,首先把Canvas的Scale縮小100倍(UI被放大了100倍),然后將RenderMode改成WorldSpace
這時候Image和Text不需要調整width和hight,縮放單位和Cube的3d世界單位完全一致
不管是真的3D界面還是假的3D界面,都有另外一個問題。如果使用同一個攝影機同時查看三維對象和UI,則會出現渲染順序問題,這會影響到Alpha Blend的結果。
半透明對象不會繪制深度。對于UI,它們都是半透明的。如果要做效果,背景圖像是UI,3D角色效果放在前面,UI放在前面,這樣會有問題。因為UI是優先SortingOrder然后才是RenderQueue(在URP下是Priority)無論怎么改RenderQueue也得不到正確的結果
UI因為要處理層級就會修改Canvas的SortingOrder,這樣界面的SortingOrder的值就比3D模型大,這就會先畫3D模型,然后在畫UI,最終顯示結果就會出錯。所以要給MeshRender修改它的SortingOrder,這樣UI、粒子、模型全都統一了SortingOrder作為單位,就好調層級了。
最后就是攝像機的組合:
public class SortOrder: MonoBehaviour {
public int MyOrder;
private void Start() {
GetComponent < Renderer > ().sortingOrder = MyOrder;
}
}
轉載聲明:本文來源于網絡,不作任何商業用途

全部評論


暫無留言,趕緊搶占沙發
熱門資訊

【游戲開發】UE4渲染引擎模塊講解

分享成長記錄還能賺錢?!這么給力的活動趕快來參加吧!...

插畫師、原畫師、漫畫師有什么區別?

天賦與努力并存的漫畫家loundraw作品欣賞

【游戲設計】游戲角色動作設計

完美世界游戲全新品牌升級

王氏教育王康慧受邀于《教育正能量》欄目解答什么是社會需要的人才?...

盤點UE4.27 的主要新功能,你都知道嗎?

轉行做什么工作比較好?
