2017-01-14 3 views
-1

私はユニファイドでトップダウンシューターを冒険しています。 0,20,0 トップダウンカメラを65度でセンタリング

  • 回転:

    :65,0,0
  • カメラこの単純なフォローコマンドを使用しているプレーヤーを追跡するカメラは、その変換

    • 位置が得ました
      private void Update() 
          { 
           transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z); 
          } 
      

      x軸上でカメラを65度回転させるため、カメラはもはやセンタリングされません。

      Ingame View

      私は戻って真ん中にカメラを中心に、スクリプトで計算するものはありますか?

      私の問題を解決するにはカメラを(0,20、-10)に設定することができましたが、アップデートで計算されていない場合に戻るように計算されている必要があります。

      private void Update() 
          { 
           transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z - 20); 
          } 
      
      と私は正しい値で、この値を置き換えたい:私はスクリプトでのz軸上の-20を計算しています現時点では

    答えて

    0

    カメラの視線が斜辺(example)を指しているように、シーンを直角三角形として想像してください。我々はカメラの地面からの高さが20単位であることを知っており、カメラが垂直に対して35度(90-65 = 35)の角度を知っています。

    Tan(35 degrees) = X/20 
    X = Tan(35 degrees) * 20 
    X = 14.004... 
    

    だから、10のあなたの推測があまりにも遠くありませんでした。今、私たちは私たちの式は、我々はなり水平距離X用

    を解決する必要があります。コードにこれを配置するには、あなたが得る:

    private void Update() 
    { 
        float zDistance = Mathf.Tan(transform.eulerAngles.X * Mathf.Deg2Rad) * 20; 
        transform.position = new Vector3(
         playerTransform.position.x, 
         transform.position.y, 
         playerTransform.position.z - zDistance); 
    } 
    

    お使いのカメラの角度が、その後変更されません場合はzDistanceは変更されませんし、あなただけのStart()に一度、それを計算することができます。

    関連する問題