使用環繞攝影機時角色的方向控制
先講這篇要呈現的效果
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,因此就不會產生角色旋轉時會轉一大圈的問題。
首先我們先在上面角色移動那程式裡面加一個函式
接著我們只要將這個函式套入每個方向的移動處理裡面即可
大致上角色移動方向和攝影機的關係處理就是這樣~如果有任何問題歡迎在下方留言
下回合預計寫"使用Mecanim控制角色動畫"
結束這回合