[英]How can I limit the rotation on the Y axis so the player cant spin the camera 360 in Unity?
[英]Player unwanted rotation on the Y axis
任何四元數天才可以告訴我我的代碼有什么問題嗎? 我有這個 PlayerRotation 腳本,它做了兩件事:
局部旋轉玩家的 Y 軸
將播放器與表面的法線對齊
PlayerMovement 只是讓玩家 go 在 transform.forward 軸上向前移動。 問題是,當我開始玩游戲並在一段時間后在一些顛倒的表面上前進時,我的玩家的 Y 軸會隨機地與操縱桿發生偏移,例如將操縱桿向前傾斜會使玩家稍微向右旋轉
input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector2 inputDir = input.normalized;
//Angle part
if (inputDir != Vector2.zero)
{
targetAngle = Mathf.Atan2(input.x, input.y) * Mathf.Rad2Deg + cam.eulerAngles.y;
Quaternion localRotation = Quaternion.Euler(0f, targetAngle - lastTargetAngle, 0f);
transform.rotation = transform.rotation * localRotation;
lastTargetAngle = targetAngle;
}
//Raycast part
if (Physics.Raycast(transform.position - transform.up * start, -transform.up, out hit, end))
{
Quaternion targetRotation = Quaternion.FromToRotation(transform.up, hit.normal);
transform.rotation = targetRotation * transform.rotation;
}
經過多次調整后得出的結論是問題似乎來自光線投射部分,但我不明白為什么
我在四元數方面的經驗幾乎僅限於使用FromToRotation
和LookRotation
以及反復試驗,直到我得到它的工作,所以我對四元數不是最了解的,但這是我認為正在發生的事情:
您正在檢測表面法線和向上向量之間的旋轉,而不是將其添加到當前旋轉中。 這樣做的問題是,即使您當前的旋轉已經與表面法線對齊,您仍然會添加該旋轉,導致它過度旋轉。
您應該做的是計算從當前向上方向到表面法線的旋轉,或者像我在下面所做的那樣,這很容易理解:
使用您當前的旋轉來確定您想要查看的方向
lookDirection = transform.rotation * Vector3.forward
並使用您的 targetRotation 來確定您要向上的方向
upDirection = targetRotation * Vector3.up
並使用Quaternion.LookRotation
計算您的最終旋轉
LookRotation(Vector3 向前,Vector3 向上)
導致你的光線投射塊看起來像這樣:
Quaternion targetRotation = Quaternion.FromToRotation(transform.up, hit.normal);
transform.rotation = Quaternion.LookRotation(transform.rotation * Vector3.forward, targetRotation * Vector3.up);
編輯:我在 Uni 使用我的 craptop,所以我還沒有實際測試過這個。
我知道這是一篇舊帖子,我還不能評論答案,但 Rishaan 的答案對我有用,我只需要改變:
transform.rotation = Quaternion.LookRotation(transform.rotation * Vector3.forward, targetRotation * Vector3.up);
至:
transform.rotation = Quaternion.LookRotation(targetRotation * Vector3.forward, transform.rotation * Vector3.up);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.