ETH官方钱包

創作內容

3 GP

Unity的插件 -- 2D Dynamic Lights and Shadows

作者:Adisa│2019-03-24 00:44:42│巴幣:6│人氣:542
   
     在製作2D橫向遊戲時,有時為了關卡需要,必須要讓關卡變暗,玩家需要拿著關卡的道具比如火把、手電筒之類的,才能照亮周遭環境,以及讓特別的物品或是怪物出現,不然畫面上的物體是無法看到的。這邊的作法用最直覺的方式就是讓玩家手持道具時,有個collider或是Raycast之類的方法來判定那些環境物體、怪物有沒有進入玩家範圍,若有的話就讓這些物體顯現??墒沁@樣在畫面表現上就是突然整個出現,如下圖
在此圖中,火把的光線collider只要一碰到幽靈的collider就會整個出現,雖然可以達到目的但是效果不是很好。

而2D Dynamic Lights and Shadows這個套件提供了一個更好的方法,先談談原理,這個套件用的方法是直接使用shader來處理,這個shader基本上只處理三件事情把color mask關閉並打開z writer以及render queue值設小,後面會稍微說明一下這個shader,接著在這個地圖上設置了三種layer的物件與三臺camera,這三臺camera中depth最大的是只顯現出永遠出現在畫面上的物體不管有沒有被火把照到,比如地板之類的,以及最上層的背景。第二臺camera也就是depth第二大的是顯現出會被火把影響的物體。第三臺camera是只會照到最下層的背景(藍色底圖)。


接著就是今天的主角Dynamic Lights,
這上面的Main可以設定光線的角度,半徑,以及最重要的哪些物體不能被穿透就像是光被擋住一樣,也就是layer那邊所設定的,這裡我設定成box也是地板的layer層,設置的效果如下
可以看到設定前光線可以穿透地板,設定後就無法穿透了。

接著就是在Light material上放入這個plugin提供的DepthMaskMaterial材質球,它的內容就是前面所提到的shader,只關閉color mask與開啟z writer以及把render queue值設小(值越小被畫出的順序越早),也就是說這一塊光線範圍原本是要黑的(黑底圖背景),因為是第一臺camera所照出的內容,也就是說depth最大的第一臺camera所照攝的畫面理應是Gpu最後繪圖的(Gpu繪圖時最後畫的物體是離螢幕最近的)所以應該會顯示出,但是因為在render queue值設定最小,因此只有這一塊光線範圍所照到的地方一定是第一個被繪圖的地方,但其他同樣是被第一臺camera攝到的物體不受影響因為不在光線範圍裡面,以及雖然在光線範圍內但z buffer(越小代表離camera越近)比光線小的物體比如地板也不受影響,因此順序是,先畫出被光線擋住的黑底圖背景因為z buffer比光線大,再畫出光線,再繪第三臺camera(藍色背景),第二臺camera(怪物),第一臺camera(沒被光線影響的黑背景,地板),因此原本是黑的地方就會變成像是有光一樣。

接著可以看看設定好後的效果如何

可以看到幽靈不是突然出現,而是隨著光線移動從尾巴開始逐漸出現,到整個物體顯現出
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=4335103
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:獨立遊戲|Unity|unity|Light|光線|2D|橫向卷軸

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

3喜歡★Adisa 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:[輕小說] 赤瞳的伊莉雅... 後一篇:Unity的插件 -- ...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】