3

(Unity 5.3.5f1 の場合) 現在、プレーヤーの周りを水平に周回する 3D カメラに取り組んでいます。プレーヤーは RigidBody の回転する球です。プレイヤーは軸を水平方向に自由に回転させることができますが、入力がない場合は、回転を速度の方向にリセットしたいと考えています。

今私が知る必要があるのは、以前の回転からカメラをプレーヤーの周りに回転させることによって、プレーヤーの速度の方向の後ろにカメラを配置する方法だけです。

ここに私が探しているものの大まかな図があります: ここに画像の説明を入力

現在、プレーヤーの周りを周回するようにカメラを更新するには、カメラで次のスクリプトを使用します (コメント付き):

 using UnityEngine;
 using System.Collections;

 public class example : MonoBehaviour {

     public GameObject Player;
     //I assume you would use this PlayerRB to find data regarding the movement or velocity of the player.
     //public Rigidbody PlayerRB;

     private float moveHorizontalCamera;
     private Vector3 offset;

     // Use this for initialization
     void Start ()
     {   //the offset of the camera to the player
         offset = new Vector3(Player.transform.position.x - transform.position.x,  transform.position.y - Player.transform.position.y, transform.position.z - Player.transform.position.z);
     }

     // Update is called once per frame
     void Update ()
     {
         moveHorizontalCamera = Input.GetAxis("Joy X"); //"Joy X" is my right joystick moving left, none, or right resulting in -1, 0, or 1 respectively

         //Copied this part from the web, so I half understand what it does.
         offset = Quaternion.AngleAxis(moveHorizontalCamera, Vector3.up) * offset;
         transform.position = Player.transform.position + offset;
         transform.LookAt(Player.transform.position);
     }
 }

どんな助けでも素晴らしいでしょう!

4

1 に答える 1

0

使用することをお勧めしますVector3.RotateTowards( https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html )

現在プレーヤーからカメラを指しているベクトル ( transform.position - Player.transform.position) を取得し、回転させます (カメラからプレーヤーまで-Player.GetComponent<Rigidbody>().velocity.normalized * desiredDistanceの希望の距離に対応する大き​​さを持つ、プレーヤーの速度の反対方向を指すベクトル)。を使用Vector3.RotateTowardsして、カメラの位置を適切に設定することにより、プレーヤーの周りでカメラを (スムーズにまたは即座に) 回転させることができます。

何かのようなもの:

transform.position = Player.transform.position + Vector3.RotateTowards(transform.position - Player.transform.position, -Player.GetComponent<Rigidbody>().velocity.normalized * desiredDistance, step, .0f);

角度がラジアン単位で更新される場合のステップ。(注:GetComponent<Rigidbody>()すべての Update を呼び出さないようにする必要があります。どこかに保存したほうがよいでしょう)

あなたの質問を正しく理解できたことを願っています。

于 2016-06-08T17:11:20.523 に答える