小屋創作

日誌2015-11-15 17:54

[Unity3D技術區]環繞攝影機x角色方向

作者:節操君

使用環繞攝影機時角色的方向控制

環繞攝影機的部分可以參照之前寫的[Unity3D技術區]基本第三人稱環繞攝影機教學,這篇是要講解怎麼去定義當前攝影機方向來判別角色的移動方向。

先講這篇要呈現的效果
1.角色會依照當前攝影機的方向去定義玩家按下WASD時所移動的方向
2.角色的Smooth旋轉
這種移動方式很多ARPG都是使用這種移動方式,例如瑪奇英雄傳黑暗靈魂巫師系列等等,做這種效果其實就是很簡單一個要點,只要能掌握當前攝影機面對的方向這個數據就好很做了~



獲取攝影機面對方向的向量

首先我們先認識一個單字"forward",這是泛指前方的意思,在unity裡面的Transform類裡面可以找到這個Transform.forward,這個變數是獲取當前物件的前方向量(長度1)




簡單來說Forward就是Unity內你選擇一個物件後,3個方向箭頭的Z軸(藍色)那個方向就是你的Forward,這個參數剛好就是我們可以拿來獲取攝影機的前方向量!

但能否直接取得攝影機的forward資訊拿來當角色移動方向?
答案是不行!直接取主攝影機的forward會變成有X軸的問題,如果你的攝影機是30度斜著看你的角色,那你這時候的forward就會是向下斜30度的向量,如果直接套用這個數據去移動角色,角色就會往下移動!


這種作法不是說不行,如果你是要做空戰那種類型的可以用這種模式,但是如果你是要做角色在地面的就要注意這點!

為了解決這個問題,我這邊用的方法是生成一個空的物件,讓該物件的旋轉的Y軸跟主攝影機的Y軸同步,之後直接取生成出來的那個物件.transform.forward即可獲得攝影機的前方向量,並且不會受到X軸影響的forward!



將這支程式掛在主角身上,這樣就會在遊戲開始時就會生成一個CameraDir的空物件在角色裡面



這個物件會不斷更新Y軸旋轉,跟主攝影機的Y軸旋轉同步,接著只要取到這個物件的Forward就會是我們角色要移動的方向!




角色移動方向的問題就這樣解決啦~~~
這問題的解法有很多種,我這只是其中一種方式,可能也有比較快速的方式可以解決這問題,可以去找看看來交流一下



角色的Smooth旋轉

接著來說明一下角色旋轉的部分,上面的處理方式只是讓角色移動,並沒有做到角色旋轉,如果你是使用RootMotion動畫製作的話甚至不用上面的步驟,直接實作角色旋轉的部分就能達到移動效果

首先我們先認識一個函式Mathf.SmoothDampAngle,這個函式給他一個當前值和目標值,他會依據SmoothTime去做平滑,並且這個是適用角度的,如果你給他350要Shooth到0,他實際上去跑會是-10~0而不是350~0,因此就不會產生角色旋轉時會轉一大圈的問題。

首先我們先在上面角色移動那程式裡面加一個函式




這個函式需要傳入一個目標角度,之後他會改變自身的旋轉,X和Z旋轉都為0,Y軸則是使用Mathf.SmoothDampAngle去平滑他的旋轉。

接著我們只要將這個函式套入每個方向的移動處理裡面即可






大致上角色移動方向和攝影機的關係處理就是這樣~如果有任何問題歡迎在下方留言

下回合預計寫"使用Mecanim控制角色動畫"
結束這回合

36

14

LINE 分享

相關創作

【遊戲開發日誌 #27】久久畫了個勇造/物品選單(搞定)/存檔介面(換這個未完)

Unity 現學現賣紀錄 - 2024.4

月底製作日誌兼雜談-第51回(2024/04)

留言

開啟 APP

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

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