簡體   English   中英

旋轉相機時物體旋轉不正確

[英]Object rotation is not correct when rotating the camera

我有一台照相機,它在照相機的前面顯示了userInterface(畫布)對象。 如果攝像機射線束未擊中userInterface對象對撞機,則僅更新用戶界面位置 像這樣的東西

public class UIPlacerAtCamFront : MonoBehaviour {

    public GameObject userInterface;
    public float placementDistance;
    Vector3 uiPlacementPosition;
    RaycastHit  objectHit; 

    void Update () {

        Vector3 fwd = this.transform.TransformDirection(Vector3.forward);
        //Debug.DrawRay(this.transform.position, fwd * 50, Color.green);

        if (Physics.Raycast(this.transform.position, fwd, out objectHit, 50))
        {
            //raycast hitting the userInterface collider, so do nothing, userinterface is infornt of the camrea already
        }
        else
        {
            //raycast is not hitting userInterfae collider, so update UserInterface position accoding to the camera
            uiPlacementPosition = this.transform.position + this.transform.forward * placementDistance;
            userInterface.transform.position = uiPlacementPosition;
        }

        //Continuously update userInterface rotation according to camera
        userInterface.transform.rotation = this.transform.rotation; 
    }
}

上面的腳本已隨附在相機中,它可以正確顯示對象,但是當我開始旋轉相機時,UI對象的旋轉看起來很奇怪,如下圖所示 這是正確的初始旋轉

當我旋轉時,會發生此問題 在此處輸入圖片說明

我知道問題出在旋轉中,所以我厭倦了更改此旋轉代碼

    userInterface.transform.rotation = this.transform.rotation; 

對此

userInterface.transform.localEulerAngles = new Vector3 (this.transform.localEulerAngles.x,
            0,
            this.transform.localEulerAngles.z);

但這給我帶來了另一個奇怪的變化,如下所示 在此處輸入圖片說明

我希望我的userinteface對象面對我的相機,即使我的相機看着我的userinteface對象的開始或結束。 如何根據相機旋轉正確旋轉UI?

如果我正確理解。 您想要的行為類似於滑動Google地圖。 只是相機必須旋轉,圖片必須針對行為調整其位置和旋轉。

下面的代碼應該這樣做:

void Update() {
    userInterface.transform.rotation = this.transform.rotation;

    // Project camera to canvas plane
    Vector3 projection = Vector3.ProjectOnPlane(this.transform.position - userInterface.transform.position, userInterface.transform.forward)
        + userInterface.transform.position;

    // Get distance from camera to projected position (basically, distance from point to plane)
    float curDistance = (this.transform.position - projection).magnitude;

    // Correct that distance with desired distance
    userInterface.transform.position += this.transform.forward * (placementDistance - curDistance);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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