如何實現類似刀塔傳奇放大招時的效果和邏輯?

如圖

1.首先是只有放大招的角色高亮

2.除了放大招的角色和他的技能特效在播放,其他的角色和特效都是停止的

在我是mt2(是unity開發的吧)中也實現了這種效果,這些如何在unity中實現?使用Time.timeScale?

mt2


除了高亮的角色,其他的都先渲染一遍,然後利用黑色圖作為蒙板做一道後期渲染成為偏黑色的圖。在此基礎上,再渲染高亮的角色和動畫就可以。這樣其實效率上比平常只多了個屏幕渲染,效率還是很高的。

具體步驟:

準備工作:

1、同樣設置的兩個camera(除depth):一個用戶非高亮的單位,一個用於高亮的單位。高亮單位的相機的depth要比非高亮的大(以保證它在前面的相機的渲染基礎上渲染東西).

2、兩個laymask,分別對應上述的兩個camera

每一幀:

1、所有非高亮的部分laymask都是對應第一個camera,這樣被正常渲染

2、第一個camera上戴上一個後期,這個後期能做的事情就是把相機渲染出來的東西進行「遮罩」。如果不知道怎麼做這個後期,建議把Unity中的Component | ImageEffects | Color Adjustments | Grayscale看懂流程後製作自己的後期。這個後期能讓第一個相機渲染出來的彩色幀信息被蒙上黑色的遮罩。

3、把需要高亮的物體的laymask動態設置成第二個相機能看到的層次(建議在本幀開始處就把所有的渲染對象按相機對應排好,不要重複渲染),因為這個相機的depth比第一個大,因此這個相機的渲染在第一個相機完成後進行(第一個相機完成後就得到圖中除了高亮和UI外的所有東西),因此高亮的效果就會被繪製在這個前期的「圖」上。

最後出現的結果就是你想要的。

上面的方法在Unity裡面如果不開抗鋸齒不能實現物體在場景中的「深度」關係,具體看評論吧。


我來瞎猜一下,說說如果給我做我會怎麼做。

1. 考慮加了個黑色透明遮罩,然後通過改變發亮角色材質的RenderQueue,不過這樣的話這個發亮的角色就會顯示在最前面,不會被其他變黑的角色擋住,所以應該不是這樣做的。

那就有可能是把除了這個角色以外的其他材質的顏色調黑。

2. timescale不變,把其他的動畫都暫停就行了。


簡單粗暴,具體問題具體分析,場景中元素不多,純手動控制各個元素的效果就好了

1 角色高亮

調整shader 將場景中其他對象 shader color 調暗, 主角color 調高即可

2 時間靜止, 角色的動畫放緩慢,飛行的子彈速度變慢

特效速度變慢


感謝大神們指點放大招暫停的實現,不使用timeScale:

人物:

停止AI

停止動畫 animator.enabled = false;

停止尋路 navMeshAgent.Stop();

特效:

停止特效控制邏輯 enabled = false;(所有控制腳本enabled = false會包括一些控制動畫的腳本邏輯)

停止粒子特效 ParticleEmitter.enabled = false;

ParticleSystem.Pause();

黑色的遮罩還沒有解決。。。。。


周華的方法不錯,不過存在一個問題,有可能在放大招的人物身上綁定了幾個scripts,存放著一些數據,這個時候就要考慮克隆出兩個gameobject,裡面的script還存在淺表複製和深表複製的問題。

我當時做的是用的一個gameobject, 用半透明的黑屏做遮罩,將人物移動到更高的層級上,要將人物隱藏再顯示,來刷新渲染層級,還有一套攝像頭移動和縮放的特寫效果,最後加上動畫的卡幀效果。

因為同時還有其他動畫飛入飛出效果,所以只是修改人物放大招的骨骼動畫,沒有修改全局時間。而且對整個戰場的renderq有個很好的設置,所以總共只用了一個攝像機。


攝像機的剔除和深度,剩下就是把動畫暫停而已。


具體實現方法:

1.新創建一個攝像機B(專用於渲染大招特效),新建一個渲染層(大招層),這攝像機的Clear Flag調成Depth Only, Culling Mask調成(大招層);

2.在原攝像機A(渲染場景與英雄)新增一層黑色透明遮罩,調其Z軸使其擋住場景中的物體,把遮罩的隱藏

3.放大招時遮罩打開,英雄模型的渲染層從原本的 場景層 變為 大招層 ,放完後遮罩關閉,英雄模型的渲染層變回 場景層

因為大招攝像機只會渲染處於大招層的英雄模型而不會渲染其他物體(主要是遮罩),所以不會變暗,而其他物體由於在前面多了一層遮罩,所以看上去會暗一點。

暫停效果是把模型暫停...不要吧整個遊戲的Timesacle設為0


多攝像機,對非高亮的角色使用renderwithshader,shader考慮好變黑參數,場景lightmap也得變黑


高亮用兩台攝像機來搞就行了,發招的時候主攝像機給黑色遮掩,然後調整大招角色層次到第二攝像機。 時間靜止用timescale不行,這個函數會改變所有邏輯幀,這裡的方法應該只是將角色和特效遍歷了一次控制一下播放和暫停就行了。

哦,題主還問到了邏輯…邏輯上應該只是停掉了行為AI


像mt2這種用u3d的 肯定是用了ngui (目前ugui還不成熟)

其實就簡單了 無非是管理ui層次的問題 一般來說這種黑屏都是一個全屏黑sprite

然後控制好camera的層次即可 如果有必要 可以多加一個camera用來只顯示最上層的角色

要注意的是 使用多camera注意剔除 以免增加不必要的Drawcall

至於動畫速度 使用timescale最簡單 但有時不推薦 可以自己寫一個簡單的動畫邏輯

如果需要受timescale影響則使用Time.time 如果不受影響使用realtime來控制

不難實現


unity怎麼實現不太清楚,但基本思路就是把發大招以外角色的tick停掉。大招前搖結束再恢復。

另外畫面上加個灰色遮罩。


完美解決,3Q


推薦閱讀:

茶館三千問:國慶來了,你選擇靠哪款遊戲度假?
抗天災戰人禍,管理好一座現代化城市有多難?這款遊戲統統能體驗。
遊戲策劃怎樣玩轉辦公室政治?

TAG:遊戲開發 | 手機遊戲 | Unity遊戲引擎 | 手機遊戲開發 |