第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Vector3 中的 eulerAngles 導(dǎo)致奇怪的旋轉(zhuǎn)

Vector3 中的 eulerAngles 導(dǎo)致奇怪的旋轉(zhuǎn)

C#
瀟瀟雨雨 2022-06-12 11:19:57
我正在嘗試更改相機(jī)旋轉(zhuǎn)的 eulerAngle X,同時將 y 和 z 保持為 0。但是,以下 IEnumerator 會產(chǎn)生奇怪的 eulerAngles,例如 10、-74.653、0。我不明白 y 值如何在以下函數(shù)中發(fā)生變化:private IEnumerator LerpCameraNormalRot(){    float duration = 0.5f;    for (float t = 0f; t < duration; t += Time.deltaTime)    {        float f = Mathf.Lerp(camera.transform.eulerAngles.x, 10, t / duration);        Vector3 vNew = new Vector3(f, 0, 0);        camera.transform.eulerAngles = vNew;        yield return 0;    }}這不是很奇怪嗎?我從不改變 Y 和 Z 值!我只想將 X 旋轉(zhuǎn) (eulerAngle.x) 從其當(dāng)前值更改為 10。感謝您的幫助!
查看完整描述

2 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗 獲得超9個贊

您正在設(shè)置,eulerAngles但這將導(dǎo)致localEulerAngles圖像中的紅色框表示的不同。如果對象有任何旋轉(zhuǎn)的祖先,它們可能不匹配!


要解決您的直接問題,您可以使用localEulerAngles代替eulerAngles:


float f = Mathf.Lerp(camera.transform.localEulerAngles.x, 10, t / duration);

Vector3 vNew = new Vector3(f, 0, 0);

camera.transform.localEulerAngles= vNew;

這樣做的問題是它沒有考慮從 359 度到 0 度的能力。更好的是使用Quaternion.Euler和Quaternion.Slerp使用四元數(shù)而不是歐拉角:


private IEnumerator LerpCameraNormalRot()

{

    float duration = 0.5f;

    Quaternion startRotation = camera.transform.localRotation;

    Quaternion goalRotation = Quaternion.Euler(10f, 0f, 0f);


    for (float t = 0f; t < duration; t += Time.deltaTime)

    {   

        camera.transform.localRotation = Quaternion.Slerp(startRotation, goalRotation, t/duration);

        yield return 0;

    }


    camera.transform.localRotation = goalRotation;

}


查看完整回答
反對 回復(fù) 2022-06-12
?
MYYA

TA貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊

unity使用旋轉(zhuǎn)、位置、eulerAngles等兩種表示

  • 一個在世界空間

  • 另一個在本地空間

不包括local在其名稱中的值在世界空間中。如果您的對象比任何被旋轉(zhuǎn)/縮放/平移的父對象具有,您將看不到您在 Unity 中設(shè)置的值,因為Transform檢查器顯示本地坐標(biāo)。

如果要將local坐標(biāo)設(shè)置為精確值,請改用localPosition,localRotationlocalEulerAngles

對我來說,您似乎想x在 0.5 秒內(nèi)將相機(jī)圍繞其局部軸旋轉(zhuǎn) 10°。

所以我認(rèn)為你可以改為這樣做

private IEnumerator LerpCameraNormalRot()

{

    float duration = 0.5f;


    float initialRotationX = camera.transform.localEulerAngles.x;

    float targetRotationX = 10;


    for (float t = 0f; t < duration; t += Time.deltaTime)

    {

        float currentX = Mathf.Lerp(initialRotationX, targetRotationX, t / duration);


        camera.transform.localEulerAngles = new Vector3(currentX , 0, 0);


        // Which would be the same as using 

        // camera.transform.localRotation = Quaternion.Euler(new Vector3(currentX, 0, 0));


        yield return null;

    }


    // to be sure you have no overshooting you could set the target rotation fix here as well

    camera.transform.localEulerAngles = new Vector3(targetRotation, 0 ,0);


    // or

    // camera.transform.localRotation = Quaternion.Euler(new Vector3(targetRotation, 0, 0));


查看完整回答
反對 回復(fù) 2022-06-12
  • 2 回答
  • 0 關(guān)注
  • 252 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號