簡體   English   中英

玩家在 Y 軸上不需要的旋轉

[英]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;
}         

經過多次調整后得出的結論是問題似乎來自光線投射部分,但我不明白為什么

我在四元數方面的經驗幾乎僅限於使用FromToRotationLookRotation以及反復試驗,直到我得到它的工作,所以我對四元數不是最了解的,但這是我認為正在發生的事情:

您正在檢測表面法線和向上向量之間的旋轉,而不是將其添加到當前旋轉中。 這樣做的問題是,即使您當前的旋轉已經與表面法線對齊,您仍然會添加該旋轉,導致它過度旋轉。

在此處輸入圖像描述

您應該做的是計算從當前向上方向到表面法線的旋轉,或者像我在下面所做的那樣,這很容易理解:

使用您當前的旋轉來確定您想要查看的方向

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM