我正在寫一個第一人稱射擊風格的相機和角色控制器。我的角色模型是超級基本的——身體是矩形,頭部是立方體。我的頭部有一個關節,這樣我就可以圍繞那個關節旋轉頭部。在 Unity 中,我將相機鎖定在頭部,這樣無論頭部指向哪里,相機都會看到。我有一個 C# 腳本,我在其中執行角色和頭部運動的所有平移和旋轉。我Transform通過 Unity 編輯器提供了我的頭部關節的腳本。我的問題是,每當我在垂直和水平方向旋轉頭部時,頭部都會開始做桶式滾動。頭部最終會倒置,或者實際上是任何方向。我可以理解為什么——如果我向左看然后向上看,隨后再向右看會導致頭部以一個奇怪的方向旋轉,對于一個真正的頭部來說——它會開始進行桶式滾動。我嘗試更改代碼,使其“圍繞”我角色身體的上下矢量“旋轉”,但這似乎并沒有改變任何東西。我仍然體驗桶滾動。我還嘗試將相對空間從自我更改為世界,只要我的角色在世界上直立,就可以“修復它”。如果我的角色開始旋轉,那么頭部旋轉開始看起來很奇怪。我怎樣才能限制我的頭只繞著我的角色的上下矢量旋轉?如果我的角色是顛倒的,在它的側面等等,頭部旋轉應該像你期望的那樣左右旋轉,上下旋轉應該沒關系。這是我對頭部關節執行旋轉的代碼。HeadJoint是移動頭部的關節變換。transform是角色的變換。在這段代碼中,我嘗試圍繞角色的上下矢量旋轉頭部,但這似乎仍然會產生滾桶效果......private void ApplyHeadVerticalRotation(){ var amountX = (-Input.GetAxis("Mouse Y")) * Time.deltaTime * RotationSpeed; HeadJoint.Rotate(transform.right, amountX);}private void ApplyHeadHorizontalRotation(){ var amountY = Input.GetAxis("Mouse X") * Time.deltaTime * RotationSpeed; HeadJoint.Rotate(transform.up, amountY);}編輯:我的意思是將此鏈接包含到我的腳本代碼中...
1 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
您說您可以理解為什么會發生這種情況,但在 gamedev.stackexchange 上有一篇關于此主題的精彩帖子。
這是一個快速修復:圍繞身體向上向量水平旋轉頭部(在“身體空間”中)并圍繞頭部右向量垂直旋轉頭部(在“頭部空間”中)。這里head是 的一個孩子body。
public Transform body;
public Transform head;
public float rotationSpeed;
void Update()
{
var amountX = (-Input.GetAxis("Mouse Y")) * Time.deltaTime * rotationSpeed;
var amountY = Input.GetAxis("Mouse X") * Time.deltaTime * rotationSpeed;
head.Rotate(body.up, amountY, Space.World);
head.Rotate(head.right, amountX, Space.World);
}
- 1 回答
- 0 關注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消