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