亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何圍繞身體的上下矢量旋轉角色的頭部?

如何圍繞身體的上下矢量旋轉角色的頭部?

C#
翻閱古今 2022-01-09 15:05:31
我正在寫一個第一人稱射擊風格的相機和角色控制器。我的角色模型是超級基本的——身體是矩形,頭部是立方體。我的頭部有一個關節,這樣我就可以圍繞那個關節旋轉頭部。在 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);

}


查看完整回答
反對 回復 2022-01-09
  • 1 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號