🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

3429閲覧

Unityでオブジェクト中心に回転するカメラの操作をキーボードで行う方法

ksoto

総合スコア12

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/12/10 10:42

私は現在、Unity上にある3Dモデルをカメラの操作によって360度どこでも好きな角度から見れるようなものを作ろうとしています。
マウスのドラッグでカメラを操作する方法では実装できたのですが、諸事情でキーボードでの操作を実装したいです。

transform.RotateAroundを使用してY軸を軸とした水平方向の回転は実装できたのですが、
垂直方向の回転がX軸とZ軸でごちゃごちゃになってうまく実装できずにいます。

現時点でのコードを下記に記します

C#

1コードusing System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class NewBehaviourScript : MonoBehaviour 6{ 7 8 //プレイヤーを変数に格納 9 public GameObject Player; 10 11 //回転させるスピード 12 public float rotateSpeed = 1.0f; 13 14 // 中心点 15 [SerializeField] private Vector3 _center = Vector3.zero; 16 17 // 回転軸 18 [SerializeField] private Vector3 _axis = Vector3.up; 19 20 // 円運動周期 21 [SerializeField] private float _period = 2; 22 23 24 // Use this for initialization 25 void Start() 26 { 27 28 } 29 30 // Update is called once per frame 31 void Update() 32 { 33 34 //回転させる角度 35 float h = Input.GetAxis("Horizontal") * rotateSpeed; 36 float v = Input.GetAxis("Vertical") * rotateSpeed; 37 38 //プレイヤー位置情報 39 Vector3 playerPos = Player.transform.position; 40 41 //カメラを回転させる 42 transform.RotateAround(playerPos, Vector3.up, h); 43 transform.RotateAround(_center, _axis, v); 44 45 46 } 47}

キーボード入力からの操作で、カメラを対象のオブジェクトの周りを360度自由に回転するにはどうしたらいいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「垂直方向の回転がX軸とZ軸でごちゃごちゃになって」とのことですが、垂直方向の軸はワールドXやワールドZのいずれかを選んだりするのではなく、水平方向の回転に合わせて回転しないといけないかと思います。
そこで、垂直回転の軸としてtransform.rightを使ってみてはいかがでしょう。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class NewBehaviourScript : MonoBehaviour 6{ 7 //プレイヤーを変数に格納 8 public GameObject Player; 9 10 //回転させるスピード 11 public float rotateSpeed = 1.0f; 12 13 // Update is called once per frame 14 void Update() 15 { 16 //回転させる角度 17 float h = Input.GetAxis("Horizontal") * rotateSpeed; 18 float v = Input.GetAxis("Vertical") * rotateSpeed; 19 20 //プレイヤー位置情報 21 Vector3 playerPos = Player.transform.position; 22 23 //カメラを回転させる 24 transform.RotateAround(playerPos, Vector3.up, h); 25 transform.RotateAround(playerPos, transform.right, v); 26 } 27}

投稿2020/12/12 23:52

Bongo

総合スコア10811

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問