2017-12-29 26 views
0

私は、カメラ自体を回転させるのではなく、目的のゲームオブジェクトを持たずに、カメラの画面を中心に軌道を回るように設定しようとしています。画面の中心を中心にカメラを回旋する

私が使用して非常に簡単にゲームオブジェクトを中心に周回することができるよ:私はターゲットなしで同様の軌道整備士を持っていると思いますが

float rotationAmount = Input.GetAxis("Mouse X") * RotateAmount; 
transform.RotateAround(target, Vector3.up, rotationAmount); 

。たとえば、Planet Coaster camera controlsを参照してください。

私は、画面の中央を試してみて、取得するためにScreenToWorldPointを使用して試してみましたが、それはまだだけでカメラを回転させているようだ:仕事をした

camera.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, camera.nearClipPlane)); 

ことの一つは、ターゲットとしてVector3.zeroを使用しています。しかし、私がカメラを翻訳すると、このベクトルはまだ(0,0,0)を指しているので、カメラは奇妙な方法で動きます。

ターゲットなしで画面の中心を回る方法はありますか?

+0

キューブをカメラの子として配置し、説明した最初の方法で回転させることができます。レンダラーを無効にすることで、キューブを非表示にすることもできます。 – Hristo

+0

@Hristo私は目に見えないオブジェクトを回転させることを考えましたが、それをどのように配置するかという問題は残っています。私がそれをカメラの子供にすると、カメラの前に本質的に地面に座ることができる位置をずらす必要があります。しかし、それは私がとにかく回っている点でもあります。 – Steve

+0

そうならないと、カメラの数メートル先にオフセットして、それをデフォルトのピボットポイントにすることができます。 – Hristo

答えて

0

GameObjectの内部にカメラを置いて(CameraHolderと呼ばせてください)、カメラをちょっと戻します(CameraHolderがカメラの正の正軸にあることを確認してください)。あなたの周りにカメラを移動したい場合は、

  1. 代わりCameraHolderの位置を移動します。今の代わりにカメラのCameraHolderを制御するために、あなたのコントロールを使用します。カメラはCameraHolderの子であるため、localPositionを保持して移動します。

    • 前方に移動するには:CameraHolder.position += camera.transform.forward
    • を右に移動するには:トリックは、しかし、camera.transformのベクターを使用して移動することですCameraHolder.position += camera.transform.right

あなたは常にカメラの相対移動この方法ビュー。

さらに、Planet CoasterのようなRTSコントロール(プレーンに沿ってスライド - この場合は地面)を行うには、CameraHolder.transform.position.yを地面に制限する必要があります。移動するたびにyを固定値に設定するか、y部分をcamera.transform.forward/rightから削除することができます。

  1. カメラを回転させたい場合は、CameraHolderの回転を変更するだけでカメラが回転します。この場合、最大最小角度(0〜-90度の間)を制限する必要があります。
+0

これはカメラ自体を動かすこととはどのように違うのか分かりません。私はすでに翻訳コントロールをカメラに直接持っています。私はまだ正確に軌道を描くためにカメラホルダーを配置するのと同じ問題を抱えています。 – Steve

+0

翻訳コントロールはどちらの場合も同じですが、CameraHolderは、カメラを回転させるピボットとして機能します。言い換えれば、CameraHolderの位置は、カメラが見ている場所です。だから、RotateAroundを使うのではなく、回転させたいときには、 'Quaternion.Eulers'や好きな方法で' CameraHolder.transform.rotation'を直接変更してください。この方法では、元の方法ではサポートしていないカメラの視野角を制限することもできます。 – AVAVT

+0

私は少し違う動きと回転スクリプトを使っていましたが、親GameObject(実際には2、翻訳と回転、そして1つはピボット)を使用して私に答えてくれたので、答えとしてマークしています。将来の読者にとっては、これはUnity標準アセットのFreeLookCamスクリプトに非常に似ています。 – Steve

関連する問題