どうも、チャーさんです。
あなたはUnityでカメラを回転させたいですか?この記事では、
カメラをマウスで回転させる方法を書いてますので、
この記事を読めば、あなたはUnityでゲーム再生中に
マウスを動かせばそれに連動してカメラを回転させる
ことができる様になります。ですが、この記事を読まなければ、
カメラを回転させるのは難しいでしょう。なぜなら
Unityの回転系はクォータニオンなどが絡み結構難しいです。
なのでUnityでカメラを回転させたいと思って
るなら、このまま記事をお読みください。
動画はこちら
Unityでカメラを回転させる方法(マウスで)
ということで結論ですが、
Unityでカメラを回転(マウスで)させる方法は、
Input.GetAxisでマウスの移動による増減をとり、
Quaternion.Eulerを使い角度を生成し、
transform.rotationに代入させカメラを回転させましょう。
これを読んだあなたは、
「何言ってんの?」と思ったかもしれません。
同意します。上記の結論説明だけでは
はっきり言ってわけがわからないと思うので
補足説明させてください。
なので説明のためにまずはコードを見てください。
おそらくその方が説明がわかりやすいです。
以下は変数宣言
float side;
float ver;
void Update()
{
// Debug.Log(Input.GetAxis(“Mouse X”));
float h = Input.GetAxis(“Mouse X”);
float v = Input.GetAxis(“Mouse Y”);
side += h;
ver += v;
transform.rotation = Quaternion.Euler(ver,side,0f);
}
というコードでして、これを書けばマウスでカメラを
回転させることができますが、仕組みとしては、
このInput.GetAxis(“Mouse X”)というやつで、
ゲーム再生画面中にマウスを左右に動かすと数値を取得する
ことができます。
例えば現在位置から左に動かすと0から-1までの少数の数値
を取得し、右に動かすと0から+1までの少数の数値を取得
します。
これはDebug.Logで一度出力してもらうとわかりやすい
かと思います。
で、それらの数値を宣言した変数である、sideに
side += h;
の様に加算していくと、マウスを左右に動かすたびに、
数値が加算され増減します。
(例えばマウスをずっと左に動かすと、
動かすたびに-1がプラスされ続け、マイナス方向にどんどん
数字が大きくなっていきます。
-10,-20,-30みたいな感じです。)
で、その増減した数値を、
transform.rotation = Quaternion.Euler(ver,side,0f);
の様に代入してやると、
transform.rotationというのは、スクリプトを
貼り付けたオブジェクトの角度のことですから、
さっきの例でいうと、角度がマイナス30度のとこに
回転してくれるわけです。
で、それをupdate関数の中で行なっているので、
マウスを動かすたびに角度にあたる部分の数値が常に
増減し、
それに合わせてカメラの角度が更新され続けるので、
カメラを回転させることができる様になります。
またQuaternion.Euler()というのは、
オイラー角を設定できるのですが、(オイラー角というのが
Unityのインスペクターとかで見る角度のやつです)
で、それをtransform.rotationに代入してるわけですね。
で、ここで回転に関して重要なのは、
float h = Input.GetAxis(“Mouse X”);
side += h;
transform.rotation = Quaternion.Euler(ver,side,0f);
でして、いわゆるマウスの横の動きにあたる
数値を、Euler()のy軸の部分に代入してるということです。
変数名が悪くて申し訳ないのですが、
オブジェクトを左右に回転させるには、
y軸の値を動かす必要があります。
なので、Input.GetAxisのマウスの左右の動きに
あたる部分の入力を、y軸に入れる。
で、逆にコードにもありますが、マウスの上下
にあたる部分
float v = Input.GetAxis(“Mouse Y”);
の数値入力を、x軸に代入してやることでカメラを上下に
回転させることができます。
この辺は、ちょっと直感的じゃなくてわかりづらい
と思うと思いますが、
これによってマウスを左右に動かした時に、
カメラも左右に回転し、
マウスを上下に動かした時にカメラも上下に回転し
上下を写す様になるので、コードの様にしてください。
マウス操作によるカメラの回転をもっと速くする方法
ということで、これでカメラはマウスに連動して回転
してくれるのですが、カメラの回転をもっと早くしたい、
そう思うこともあるかもしれません。
そこに関しては、
float speed =2f;
の様に変数宣言をして、
side += h*speed;
ver += v*speed;
の様にして、数値をかけてあげましょう。
そうすると単純にかけた数字の速さでマウスに反応する様に
なるので、回転がスムーズに(はやく)動く様になります。
マウスの動きに対する敏感さ、みたいな感じですね。
ゲーム再生中マウスを非表示にする方法
であとは、これはおまけみたいな内容ですが、
上記の内容をやれば、マウスに合わせてカメラは回転するのですが、
画面内にマウスが残ることになります。
なのであなたはマウスでカメラを回転させる際、
マウスのカーソルがちらついてちょっとうっとうしく感じる
可能性があります。
なのでマウスをゲーム再生中画面の時だけ
見えなくするのがおすすめです。
その方法とは、
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
と書いてやることです。
こう書くことで、ゲーム再生画面を押したら、
マウスが画面の真ん中に固定され、見えなくなります。
なのでカメラを回転させるためにどんなにマウスを
動かしても、気にならなくなるため、
本記事の内容を実践したついでにやると良いですよ。
ちなみに消えたマウスはEscキーを押せば、
表示される様になるので、再生画面を抜けたい場合は、
Escキーを押して、ゲーム画面を終了させましょう。
また一応コピペで動かせる様にスクリプト全文を載せておきます。
public class スクリプト名 : MonoBehaviour
{
float side;
float ver;
float speed =2f;
// Start is called before the first frame update
void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
// Debug.Log(Input.GetAxis(“Mouse X”));
float h = Input.GetAxis(“Mouse X”);
float v = Input.GetAxis(“Mouse Y”);
side += h*speed;
ver += v*speed;
transform.rotation = Quaternion.Euler(ver,side,0f);
}
}
ということでまとめに入ります。
まとめ
Unityでカメラをマウスで回転させる方法は、
Input.GetAxisでマウスの移動による増減をとり、
Quaternion.Eulerを使い角度を生成し、
transform.rotationに代入させカメラを回転させましょう。
わかりやすくない結論で恐縮ですが、
上記をすればマウスでカメラを回転させることができます。
カメラの回転をマウスでできるのは、
非常に直感的な操作ができて良いので、
ぜひあなたも本記事の内容を実践してやってみてください。
ということで、この記事を読んでいただき
ありがとうございました。
それでわ。
チャーさん