こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「UnityのMainCameraってなに?」
「MainCameraを使うとどんなメリットがあるの?」
というお悩みの方に向けた内容となっています。
Unityでプロジェクトを新しく立ち上げた際に、シーン内にデフォルトで「Main Camera」というカメラオブジェクトが設置されています。
このMain Cameraは、タグで「MainCamera」を指定していて、スクリプトから「Camera.main」と書くだけで、Cameraコンポーネントを取得することができる機能があります。
これを使えば、Cameraコンポーネントを取得する記述がいらないので、よりスクリプトを短縮して書くことができます。
そこで、このページでは、Unityで使われるMainCameraのタグ機能について、仕様や特徴をまとめていきます。
MainCameraの仕様・特徴
Main Cameraは、ゲーム内を表示するためのカメラオブジェクトで、プロジェクト立ち上げ時にデフォルトで配置されています。

MainCameraのタグが設定されている
初めから配置されているMainCameraは、同じく「MainCamera」というタグ設定をしているカメラオブジェクトとなっています。
Unityでは、このタグを使って、そのオブジェクトがどういうオブジェクトなのかを判別することができるようになっています。
タグ設定は、インスペクターウィンドウから設定・確認することができ、実際にMain Cameraを選択してみると、以下のように「MainCamera」というタグが紐づいています。

このMainCameraのタグが設定されているカメラは、この後紹介する「Camera.main」で簡単にCameraコンポーネントにアクセスできるようになります。
ちなみに、Main Cameraのオブジェクトを誤って消去してしまったり、別のカメラをMainCameraにしたい場合は、新しくカメラオブジェクトを配置して、タグ設定でMainCameraを指定すれば問題ありません。
Camera.mainでコンポーネントを取得
カメラオブジェクトでMainCameraのタグを設定している場合は、スクリプトから「Camera.main」と書くことで、簡単にそのカメラオブジェクトのコンポーネントにアクセスすることができます。
通常、MainCameraのタグ設定がされていないカメラは、スクリプトからCameraコンポーネントを使う場合、GetComponentメソッドなどでコンポーネントを取得する必要があります。
例えば、カメラでズーム処理を行う場合、
using UnityEngine;
public class CameraController : MonoBehaviour
{
Camera cam;
void Start()
{
cam = GetComponent<Camera>(); // Cameraコンポーネントを取得する
}
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
cam.fieldOfView -= 0.02f;
}
}
}
上記の9行目のように、先にGetComponentメソッドなどでCameraコンポーネントを取得してから、処理を書いていく必要があります。
しかし、MainCameraのタグ設定がされているカメラの場合は、「Camera.main」でコンポーネントにアクセスすることができるため、
using UnityEngine;
public class CameraController : MonoBehaviour
{
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
Camera.main.fieldOfView -= 0.02f;
}
}
}
上記のように、GetComponentメソッドなどを使う必要がなく、9行目でCamera.mainと書いて簡単にアクセスすることができます。
このように、カメラオブジェクトにMainCameraのタグが設定されている場合は、スクリプトから簡単にCameraコンポーネントを使うことができます。
MainCameraが複数ある場合は最初に検出されたカメラが対象
では、複数のカメラオブジェクトにMainCameraのタグ設定がされている場合は、どのカメラのコンポーネントにアクセスすることになるのでしょうか?
MainCameraが複数ある場合は、ステータスが有効なカメラの中で、最初に検出されたカメラを取得することになり、どのカメラが取得されるかわからないので、複数のカメラにMainCameraのタグを設定するのは控えたほうが良さそうです。
実際に、以下のように試してみました。
MainCameraのタグを設定した3つのカメラを準備して、一番初めに配置したカメラを左、二番目に配置したカメラを真ん中、三番目に配置したカメラを右、にそれぞれの映像が表示されるように、Render Textureを設定しています。

そして、空のオブジェクトを作成して、以下のようにスペースキーを押すとMainCameraがズームするようなスクリプトをアタッチしてあげます。
using UnityEngine;
public class CameraController : MonoBehaviour
{
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
Camera.main.fieldOfView -= 0.02f;
}
}
}
これでゲームを実行してみると、

右のカメラだけがズームされているので、ここでは一番最後に配置したカメラがCamera.mainで取得できているのがわかります。
ただし、状況次第で取得できるカメラが変わるかもしれないので、複数のカメラにMainCameraを設定するのは控えておきましょう。
まとめ
このページでは、Unityでカメラオブジェクトに設定できるMainCameraのタグについて、どんな仕様や特徴があるのかをまとめていきましたが、いかがでしたでしょうか?
カメラオブジェクトに「MainCamera」のタグを設定すると、「Camera.main」の記述だけでそのCameraコンポーネントに簡単にアクセスすることができるようになります。
Cameraコンポーネントを使ったズーム処理や、MainCameraのオブジェクトを取得したい場合などに、非常に便利に使うことができます。
ただし、MainCameraは一つのカメラしか取得できないため、複数のカメラに設定するのは止めておいたほうが良いでしょう。
最後までお読みいただきまして、ありがとうございました!
コメント