FPS遊戲中局部放大倍鏡實現效果

其實跟吃雞的倍鏡原理是一樣的,原理可參考上一篇文章

代碼律動:吃雞開發實戰之倍鏡實現?

zhuanlan.zhihu.com圖標

區別在於他們的放大區域不一樣,所以實現的思路是兩個攝像機外加一個3DObject相互合作來實現的,通過將副攝像機的渲染區域繪製成一張RenderTexture,然後在將這張RenderTexture賦值給3DObject的材質球,

之後再將我們的副攝像機忽略3DObject的渲染,只留給主攝像機去渲染即可.

同樣用幾張圖來剖析

圖中1為主攝像機,圖中2為副攝像機,他們的位置相同旋轉角度一致,只有渲染角度不同.然後圖中3為我們成像投射的區域.

由副攝像機縮小渲染角度,放大成像,然後將成像渲染成一張平面圖,將這個平面圖賦值給圖中3的材質球上面,然後再用主攝像機去渲染圖中3的那個物體即可,

注意:副攝像機應該忽略渲染3號元素.忽略方式可以給Cylinder創建一個Layer層,然後副攝像機的CuliingMask 裡面把那個層忽略掉即可.

第一步

先在主攝像機下面創建一個攝像機

與吃雞不同的是,這裡的縮放效果需要在這個副攝像機上面進行

接下來在Camera下面創建一個Cylinder,這個Cylinder就是我們的放大鏡片了.

創建出來的圓柱體是長這樣的,我們需要通過修改他的Transform屬性讓他變成一個對著我們鏡頭的一個鏡片.

調整完它是這樣的一個效果,具體的大小可以根據自身需求去調整與副攝像機的距離即可.

設置好了之後.創建一張RenderTexture圖片

創建完之後設置RenderTexture解析度,否則會失真有鋸齒.

之後將我們創建好的RenderTexture圖片放置到我們的副攝像機下面的TargetTexture屬性裡面,這樣的話攝像機就會把他視角內看到的東西渲染成一張圖片賦值給我們的RenderTexture。

再創建一個材質球,選擇一個可以放置貼圖的Shader,將我們的Texture放置上去.放置完之後將材質球賦值給我們的Cylinder,這樣我們渲染出來的場景就會顯示在外面的Cylinder上面了.效果如下:

最後把我們的UI鏡框顯示出來,然後修改副攝像機的Field of View, 以及在開鏡的時候將副攝像機打開,關鏡的時候把攝像機關閉即可.代碼修改如下.

public void OpenMirror(ScopeType _scope) { Float _timesScope = GetTimesScope(_scope);//獲取倍鏡縮放倍數 Scope.gameObject.SetActive(true);//倍鏡開啟 baseScope.gameObject.SetActive(false);//基礎鏡關閉 scopeCamera.fieldOfView /= _timesScope;//攝像機渲染角度修改 ScopeCamera.fieldOfView.gameObject.SetActive(true);//副攝像機開啟. mCurrScopeType = _scope;//將鏡子的類型儲存起來. }

實現完之後效果如下:


推薦閱讀:

今天315,我們來聊聊外包行業那些「假」
有哪些行業容易遇到潛規則事件?
7大短視頻案例分析,教你怎樣做到吸睛又賺錢?
互聯網從業者如何提高自己工作以外的收入?
為什麼尹素婉說再給5000萬也不簽這熊貓tv這個平台?

TAG:互聯網 | 計算機 | Unity遊戲引擎 |