Unity 腳本分享 - 攝影機捕捉多角色
[前言]
最近在開發2D遊戲攝影機的時候,參考到一篇2D攝影機設計經典文章
其中有提到,在多人操作的時候,會希望攝影機能照到所有角色,這篇就將討論如何實做這件事。
任天堂明星大亂鬥是這種攝影機的翹楚
[分析]
在開始製作之前,我們先試著簡化遇到的問題
從上面這張圖來看,四個紅圈是我們的目標(角色),我們希望的是將他們都顯示在畫面中。
那也就是說,我們希望能夠用一個長方形(螢幕)來塞下他們全部。
如下圖
我當初看到這個問題的時候,馬上想到演算法學到的convex-hull問題,
找出最小凸包之後,就可以沿著凸包求得最小的方形。
但是在我們攝影機不會旋轉的情況,我們不需要那麼麻煩,因為軸是固定的,
我們只要找到這些點之中最大和最小的x,y值即可
如下圖
判斷的程式碼如下
接著我們就可以利用判斷出來的這四個點做延伸,找出目標的長方形
此時將攝影機放在這個長方形的中心點,再將攝影機縮放到比長方形大小還要大,
就可以拍到所有角色囉!
[實作]
接下來實作長方形大小的計算,以及攝影機的縮放部分
這邊我的攝影機縮放以orthographic的攝影機為例(因為直接size乘上去就好),
使用投影的情況就再額外計算Z軸距離吧!
以下是我實作的程式碼:
使用前面說的方法獲得整個長方形的四個點之後,可以簡單地算出他們的中心點(第15行)
接著算出畫面長寬相對於長方形的長寬比例,將較大的一方回傳給攝影機設定就可以了!(17~20行以及22行所做)
執行結果大致如下影片
整個專案的repo在這,如果有興趣也歡迎參考使用喔XD