Unity 實現螢幕多屏分屏效果

2021-06-29 02:09:31 字數 1697 閱讀 4939

最近在做乙個專案用到了多屏效果,研究了一下分享一下,實現效果如下

主要用到攝像機的 viewportrect屬性

camera屬性

clear flags:很容易理解,清除一些元素,最常用的可能就是預設的skybox,只有一些特殊情況下才會修改這個屬性,比如想多個攝像機顯示不同元素的時候例如gui或者是固定顯示。

background:背景色,這個超簡單,注意的是裡面的alpha值,預設為5,看似沒用,其實在做鏡子的時候經常把它清0。

culling mask:層的概念,預設是everything把每一層都顯示出來,如果你想做用多攝像機做小地圖的話,這值就很重要,因為可以只顯示你標註的那一層的物體,比如角色或者敵人。

projection:投射,預設perspective應用在3d遊戲,而orthographic基本就是做2d遊戲或者gui,簡單說就是後者沒有距離感(z值忽略)。

field of view/size:視野長寬。(做加速效果的時候可能用上)

clipping planes:視野遠近。

normalized view port rect:camera的位置和長寬 ,做分屏的時候,兩個攝像機就要對半分這個數值。

depth:深度,顧名思義,深度越高就顯示在越上層,很有用的乙個數值,比如用來切換攝像機的時候。

rendering path:渲染方式,對於光影有影響,針對使用場合和遊戲平台來選擇。

target texture:關聯一張render texture,顯示當前camera資訊,簡單來說就是把實時影象更新在一張上。

實現的兩種方式

兩個camera,數值各取一半,如下圖,上面的camera的normalized view port rect數值(x,y,w,h)為(0,0,1,0.5),背景色預設,下面的camera的normalized view port rect數值為(0,0.5,1,0.5),背景色為白色。這是最簡單的分屏方法。

當然這種分屏方法在深度不同的情況下可以拿來做小地圖,但不建議這麼做,因為camera多了渲染負擔就會加大,對效能影響很嚴重,但適合做放大鏡之內的東西

camera.rect = new rect(0f,0f,0.5f,1f);
另一種方法

同樣是兩個camera,新建乙個render texture(project檢視裡面右鍵)並放在乙個俯視的camera的targettexture屬性裡面,這樣這張render texture相當於一張texture,可以綁在材質球(shader為unlit/texture)或者顯示在gui裡面,例如下圖左邊白色背景的是綁在乙個cube上,右邊的是應用在乙個guitexture上,其實大小相同,這裡可以清楚地看出有其中的同,gui預設呼叫了background的alpha值。

這種方法比較靈活,可以用在很多場合,你可以把它放在乙個guibox或者guiwindow中可以實現拖動,放大或者縮小,效果還是很不錯的。

左邊是攝像機實現的,右邊是用 rendertexture實現的,

使用gui.box或者gui.drawtexture();建議使用gui.drawtexture,因為在改變攝像機位置的時候box不會自動重新整理,就是一張。

Unity分屏顯示效果

最近的專案遇到了分屏顯示的需求,特此來研究一下方法。大體效果如下所示。1.最簡單粗暴的辦法 複製4分相同的場景 包括ngui介面和cube物件 分別拖到4個不同的區域對調節攝像機的檢視大小範圍 這種方式 之前部落格我已經講到過 專案實際執行中 4分相同場景執行 機器爆卡 雖然專案大小其實也不大 場景...

Unity多屏研究

首先是說說一些常用的camera屬性。clear flags 很容易理解,清除一些元素,最常用的可能就是預設的skybox,只有一些特殊情況下才會修改這個屬性,比如想多個攝像機顯示不同元素的時候例如gui或者是固定顯示。background 背景色,這個超簡單,注意的是裡面的alpha值,預設為5,...

Unity 多螢幕專案

專案開發有多螢幕需求,按如下操作即可 在unity中,display1 9表示9個不同的螢幕,預設情況下設定為display1,如有多屏需要,則需要設定相對應的螢幕 在inspector面板中將camera中的target display設定為所需的display 2 9 新建乙個game面板,在g...