Unity3d截圖方法合集
阿新 • • 發佈:2019-02-15
最近專案需求截圖,於是就全部研究了一下,期間遇到了各種問題,與諸位大神討論後終於解決了
主要有三種方法:
下面我們先驗證一下這個說法:
如圖使我們場景執行的效果,我們想要截按鈕那個地方的圖,Rect(0, 0, 200, 200):
理想的截圖出來應該是左邊圖樣的,實際截出來的圖是右邊的圖樣,明顯的截了左下角的了:
於是我寫了一個矩形轉換座標的函式:
截圖前轉換矩形座標後:
截出來的圖如圖,現在就對上了,而且範圍超出螢幕範圍,unity會崩掉,這裡直接容錯:
坑二:相機渲染順序
官網的案例是寫在OnPostRender中的,然後在相機渲染玩所有它的物體之後被呼叫,但是在其它相機和GUI被渲染前呼叫:
結果如圖:截圖中沒有GUI,由於OnPostRender只能掛在攝像機上,你也可以其它地方直接呼叫截圖方法。其它方法類似情況也出現過,比如只有天空盒子,或者只有GUI沒有三維模型等等。還會報如下圖的錯誤
解決方案:
WaitForEndOfFrame,可以把OnPostRender方法改成協同,也可以直接把截圖方法改成協同呼叫
下面言歸正傳:
踩過上面兩個坑後,我們就可以正常的截圖幕中的任意矩形了,比如Rect(200, 200, 200,
200),如圖:
截圖如圖所示: 原理是此攝像機的renderTexture是全屏的,我們從中擷取我們需要的 第三種方案還已遺留了個坑,當第二個攝像機帶有天空盒子時,截圖只看到天空盒子,大神高手會的幫忙解答下。
- unity自帶的全屏截圖
- unity主場景區域性區域截圖
- unity針對某個相機看到的區域區域性截圖
-
針對第一種方案的截圖很容易
-
unity主場景區域性區域截圖
-
unity針對某個相機看到的區域區域性截圖
截圖如圖所示: 原理是此攝像機的renderTexture是全屏的,我們從中擷取我們需要的 第三種方案還已遺留了個坑,當第二個攝像機帶有天空盒子時,截圖只看到天空盒子,大神高手會的幫忙解答下。