【インディーズゲーム応援キャンペーン実施中】

新人エンジニアがゲーム開発エンジンUnityを使ってみた7【Unityのカメラ】

こんにちは、ひっしーです。

Unityについての紹介記事も今回で第7回になりまして、ここにきて基本中の基本カメラについて紹介したいと思います。

ここまで読んでいただいた方はUnityの基礎的な操作をもう覚えていると思いますので、カメラについても摩擦なく受け入れられると思います。

今回の目次

  • Unityのカメラ
  • カメラの位置・角度を変える
  • カメラを複数表示してみる
  • カメラをC#で動かしてみる(応用編)
  • まとめ

Unityのカメラ

今まで、あえて触れてこなかったのですがゲームビューに映るオブジェクトの様子とシーンビューに映る様子は違いがあることに気づいたでしょうか?

シーンビューはデフォルトだと斜め上からみているような見え方でゲームビューは真横からの視界になっています。

この違いは、カメラの位置と向きによるものです。

カメラが映している範囲が実際のゲーム上で見える世界になります。

ゲーム世界を映しているものなのだから今まで行ってきたオブジェクトの操作とは違ったものを想像するかもしれませんが、実はカメラもオブジェクトの一種です。

なので、今までのオブジェクト操作と同じ感覚で扱うことが出来るのです。

では、カメラの操作・設定を見ていきましょう。

カメラの位置・角度を変える

先ほど説明したようにカメラもオブジェクトなので当然、位置や角度を変えることが出来ます。

まずは、カメラをわかりやすく理解するために映す対象を作成しましょう。
Cubeをヒエラルキービューから作成します。

オブジェクトの作成についてはこちらの記事を参考にしてください

新人エンジニアがゲーム開発エンジンUnityを使ってみた3【オブジェクトの配置と操作】

次にヒエラルキービューにあるMain Cameraを選択してシーンビューとインスペクタービューを見てみましょう。

すると、インスペクタービューにはこれまでのオブジェクトと同様にTransformのパラメーターがあります。
※Zが-10になっているのは、オブジェクトを映す必要があるので作られたオブジェクトより後ろにくるように標準で-10が入っています。

シーンビューには、実態が見えないですが何かが選択されており、ビデオカメラのシルエットのようなマークが映っていることがわかります。

試しにTransformの値を変えてみましょう。
positionをX:0,Y:2,Z:-10に設定してください。

設定を終えたら今度はゲームビューを見てください。
すると、先ほどまでCubeの真横が映っていましたがCubeが下に下がったように表示されています。
これは、CubeのYの位置よりもMain CameraのYの位置が高いところにいるため上からCubeを見ている状態になったのです。

では、今の位置で角度を変えてみましょう。
TransformのRotationをX:30,Y:0,Z:0にしてください。

すると、Cubeを見下ろしたようにゲームビューに映ります。
このようにカメラの位置と角度を操作することでプレイヤーを上から見ながら操作するようなゲームが作れます。

カメラを複数表示してみる

カメラは、一つだけでなく複数表示することも可能です。

複数のカメラを映すことでよくある、レースゲームのバックミラー部分のように前の景色を映しつつ、後ろの光景も見るなんてことが可能になります。

では、実際に設定してみましょう。

前と後ろを見ていることがわかるように先ほどと別のオブジェクトを配置してみましょう。
ヒエラルキービューでSphereを作成し、TransformのpositionをX:0,Y:0,Z:-20としてください。

次にカメラを追加しますが、わかりやすく比較するためMain CameraのTransformのpositionをX:0,Y:0,Z:-10にし、RotationX:0,Y:0,Z:0に戻しておいてください。

ここまで完了したら、ヒエラルキービューでカメラを作成しましょう。
+ボタンからCameraを選択します。

ヒエラルキービューにCameraが追加されるので選択してインスペクタービューでTransformのpositionをX:0,Y:0,Z:-10にし、RotationX:0,Y:180,Z:0に設定しましょう。

すると、ゲームビューの表示が先ほどまでCubeだったのが、Sphereになったかと思います。
これは、今作成したCameraがゲームビューのすべてに表示されるように設定されているので、Main Cameraを隠してしまっています。

では、Main Cameraの映像も表示できるようにCameraの表示位置を変更しましょう。
表示位置はインスペクタービューのCameraの中のViewport Rectから変更します。
Viewport RectをX:0,Y:0.8に変更します。

すると、画面の上側にSphereが表示され、中央にCubeが表示されました。

このように、一つのゲーム画面で二つの映像を表示することが出来ます。
Unityでは、カメラもオブジェクトとして操作できるため直感的に配置と表示させたい位置を決めることが出来るのです。

先ほど設定してもらったViewport Rectですが、今回は表示させる位置だけを変更しています。
ですが表示させる サイズも変更可能です。
各パラメータの意味はX,Yはもちろん表示位置です。
W,HはWが表示の幅でHが表示の高さです。
また、ここに入れる値は0~1までになり1が最大の値です。
1以上の値を入れたとしても1と同じ扱いになります。

Viewport Rectは少々難しいので、皆さんもいろいろ触ってみて慣れてください。

カメラをC#で動かしてみる(応用編)

最後に、カメラをキーボード入力で動かしてみましょう。

カメラもCube、Sphereなどと同様にオブジェクトです。
なのでC#スクリプトを使用することで同じように動かすことが可能です。

オブジェクトのC#を使用した移動と今回使用するプログラムコードはこちらの記事で紹介しているのでC#スクリプトはこちらの記事のスクリプトを準備してください

新人エンジニアがゲーム開発エンジンUnityを使ってみた5【C#スクリプトで動かす】

カメラを一つせっかく用意してもらったのですが、カメラを動きを見る際に邪魔になってしまいますので今回はCameraを削除しましょう。
※削除は、オブジェクトを選択してキーボードの[Del]キーで行えます。

次に、準備したC#スクリプトをMain Cameraにドラッグ&ドロップして追加します。

追加したら、ゲームを再生してキーボードの矢印ボタンから操作してみましょう。

少しわかりづらいですが、シーンビューも合わせてみるとカメラが移動しオブジェクトの見え方が変わっていることを確認できます。

このように、今までオブジェクトに対して行ってきたことはカメラに対しても同様の方法で実装することが出来ます。

まとめ

いかがでしたでしょうか、いままで何気なく見てきたゲームビューの景色はカメラオブジェクトが表示していた映像だったんですね。

今回のポイントは、

・ゲーム画面の映像はカメラが映している範囲
・カメラはオブジェクトの一種

・複数のカメラを表示することもできる
・オブジェクトの操作で行えることはカメラでも同様の操作を行える

深く学べば、カメラの表示切り替えなどもできるようになりますが今回は取り上げていないので機会があれば紹介できればと思っています。

今回紹介したC#でカメラを動かす方法を応用してみれば、FPSゲームの視点を作ることも難しくありません。

皆さんが作りたいゲームにあった技術を身に着けてみてください。

(Written by ひっしー)