創作內容

6 GP

亂七八糟的_遊戲開發誌[6] 3D攝影機實現

作者:Daily│2019-02-02 17:39:09│巴幣:20│人氣:915
上期我們大致介紹了一些3D遊戲的攝影機
了解這些背景知識對遊戲設計來說是至關重要的
如果大家對於這方面的知識有興趣 想知道更多
也歡迎留言跟我說 我或許可以單獨寫一篇文章

這回我會專注在第三人稱FreeLook的攝影機上

我們大致上要先做的事情有3個
1.攝影機跟隨
2.攝影機自轉與公轉
3.攝影機距離

攝影機跟隨
攝影機跟隨直覺我們會直接修改攝影機的座標
這樣做可以達成我們要的效果 但是對於遊戲來說並不完美

我們會發現直接跟隨腳色的座標會導致攝影機一子在拍腳色的腳
都不知道拍3小
這時我們可以在腳色身上放一個空物件當作定位點 ( 這種方式很常用 )
然後讓攝影機跟那個點

在3D遊戲中攝影機會呈現畫面給玩家
如果攝影機太頻繁的移動或改變 玩家有可能會產生暈眩感(3D暈)
可以利用線性插值(lerp)來平滑攝影機的移動

這邊來解釋一下甚麼是線性插值(不想看可以跳過)

很多人在寫教學的時候都只有說線性插值可以拿來平滑
沒有解釋其中的原理
其實線性插值是一種數學方法(我知道大家都很排斥數學 所以我不會用數學跟你543)
(注意我們這裡只討論Unity中的效果及用法)
看下面的圖吧

A是一般移動
B是線性插值
可以發現兩種方式到達終點所花得時間是一樣的
但是線性插值 會先以比較快的速度出發 然後慢下來

運用線性插值的結果

攝影機太近了
我們可以稍微修改一下攝影機的結構

這樣修改後攝影機多了一個父物件 (我把它叫做CameraRig)
之後我們再修改代碼 把原本控制攝影機的座標 改成修改CameraRig的座標
這樣子就可以把攝影機保持再腳色後方一定的距離了

為甚麼不直接修改座標加一個距離給他呢?
因為到時候後面做旋轉的時候這樣會方便很多
像是隔壁棚Unreal也是利用類似的方式(叫做彈簧臂)
我們這樣修改之後也可以把它看成一個無形的桿子(?
像自拍神器那樣

這樣就完成跟隨了 接著做自轉與公轉

自轉很簡單 我們可以利用unity提供的LookAt函數來達成
使用LookAt可以把指定的物件的正前方對準你想對準的東西 (就像一直看著他一樣)

稍微複雜一點的是公轉 如果沒有做CameraRig(自拍神器)
公轉就會變得無比複雜 但有了自拍神器你要做的就只有簡單的旋轉而已
沒有CameraRig 要把旋轉轉換成座標移動

有CameraRig 簡單的旋轉

輸入
知道了旋轉方法我們可以把滑鼠的XY移動帶入用來控制旋轉
可以多乘上一個數字當作靈敏度
這邊牽扯到一些數學 像 四元數旋轉 和尤拉旋轉
這個話題也很長這邊先不展開(有問題再留言給我
滑鼠的輸入 (垂直超過90度畫面會跳一下)

限制你的旋轉!
我們必須限制旋轉不然如果你的攝影機轉超過90度向下玩家會吐
可以利用C#提供的數學函數(mathf) Repeat 來限制水平旋轉 Clamp 來限制垂直旋轉
Repeat 這函數可以設定一個值 當代入的值大於你設定的值 就會歸0
可以限制水平旋轉  不然玩家一直旋轉畫面旋轉角度就會變很大可以減少淺在問題
Clamp 這個函數 就像一個夾子可以把帶入的數限定在一個範圍中
可以限制垂直旋轉 讓畫面不會翻轉

終於完成跟隨與旋轉了 篇幅已經很長了 可以先休息一下

接著我們來看最後的攝影機距離吧!
攝影機距離其實有一個要考量的點
先想想以前玩線上遊戲的時候我們會很習慣利用滑鼠滾輪來拉近或拉遠攝影機
看似理所當然但你有考慮手把玩家的感受嗎QQ?
對手把沒有滾輪所以不能直接調整攝影機距離
所以在設計這一塊的時候要看你是否要支援手把
在這邊介紹一下目前主流的幾種解決方案(不做手把支援的也可以看看)

1.距離綁定仰角與俯角 ex.馬力歐奧德賽
2.單一按鍵控制距離 階段式 例子我忘了有想到可以在留言告訴我
3.直接不給調 ex.掌機魔物獵人
當然還有其他種這裡先不一一舉例
第一種 就是當視點越高時距離會比較遠 視點低時會變近
第二種 通常會準備3個或更多的預設距離 然後按按鍵在這之中切換
第三種 就不給調拉 但我這邊舉例掌機魔物獵人 可能有很多資深獵人有發覺
當攝影機向上看得時候(仰角)距離會變近阿? 這邊的變近不是因為要給你切換距離
而是不這麼做的話攝影機會跑到地面下面(攝影機碰撞我們之後再談)

當然還是滾輪最方便

這邊因為我想要支援手把 也想要讓pc玩家可以利用滾輪所以我都要把它做進去
手把的話我要採用上面的第一種方法
接著就開始吧
因為有了CameraRig 我們的攝影機距離也變單純了
只要調整攝影機到CameraRig 的Y軸就是我們的距離
修改了這個Y軸還不會影響跟隨跟旋轉CameraRig 好處多多啊

先做滾輪吧
輸入判定就用Input.GetAxis("Mouse ScrollWheel")
這個Mouse ScrollWheel就是滾輪滾動的軸 可以在InputSetting裡面調整他
把這個值加到距離上 加之前可以乘上一個攝影機縮放速度
也別忘了用Clamp加上限制

在來是手把的部分
因為手把操作的時候距離會和攝影機俯仰做連動
雖然有連動但這邊可以不必改動之前的代碼
只需要在多判定"是搖桿的Y軸移動時"多修改距離就好
搖桿的輸入可以在InputSetting中設定 (找不到可以留言給我)

這樣就完成了攝影機縮放了
當然攝影機還有一個很沉重的話題
"攝影機碰撞"
這個東西是一個非常古老的問題
我們以後會慢慢談到

完成了基本攝影機我們會發現操作變得超困難
因為當你按住向前的時候腳色並不是向攝影機前方移動
下回我們會修正這個問題


雜談
阿~這篇的篇幅好長阿
好久沒打這麼多字了痛苦
做GIF好麻煩喔~
各位比較喜歡甚麼樣的遊戲攝影機呢?
留個言吧
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4281027
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity(遊戲引擎)|遊戲製作|自製遊戲

留言共 1 篇留言

Gun5HwaDo
大大加油,小弟本身會做點3D建模說不定未來能合作

02-02 20:21

Daily
謝謝 話說我之後也會放一些建模的紀錄到時候請多多指教WWWW02-02 20:26
我要留言提醒:您尚未登入,請先登入再留言

6喜歡★q090400 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:亂七八糟的_遊戲開發誌[... 後一篇:亂七八糟的_遊戲開發誌[...

追蹤私訊切換新版閱覽

作品資料夾

hyzgdivina喜歡虹咲的LLer
我的小屋裡有很多又香又甜的Hoenn繪師虹咲漫畫翻譯喔!歡迎LoveLiver來我的小屋裡坐坐~看更多我要大聲說昨天21:03


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】