【Unity】Camera.main 以外でカメラを取得する方法

Camera.main はタグが “MainCamera" に設定されているカメラを返す便利な機能ですが、プロジェクトによってはこのタグに依存しない方法でカメラを取得したい場合があります。本資料では、Camera.main を使用しないでカメラを取得する方法をいくつか紹介します。


1. Camera.allCameras を使用してカメラを取得する

Camera.allCameras を使うと、シーン内のすべてのカメラを配列として取得できます。この配列から特定のカメラを選んで操作します。

サンプルコード:

Camera[] cameras = Camera.allCameras;  // シーン内の全カメラを取得
Camera firstCamera = cameras[0];       // 最初のカメラを使用

説明:

  • Camera.allCameras はシーン内に存在するすべてのカメラを配列として取得します。
  • 複数のカメラが存在する場合、どのカメラを使用するかを選択できます。

2. FindObjectOfType<Camera>() を使用する

シーン内に存在するカメラを1つだけ取得したい場合、FindObjectOfType を使用できます。これにより、最初に見つかった Camera オブジェクトを取得できます。

サンプルコード:

Camera foundCamera = FindObjectOfType<Camera>();

説明:

  • FindObjectOfType<T>() は、シーン内に存在する最初のオブジェクトを検索します。
  • カメラが1つだけの場合に便利です。複数のカメラがある場合、最初に見つかったカメラのみが取得されます。

3. GameObject.Find() でカメラを名前指定で取得

特定のカメラの名前が分かっている場合、その名前を使ってカメラを取得できます。

サンプルコード:

Camera namedCamera = GameObject.Find("Main Camera").GetComponent<Camera>();

説明:

  • GameObject.Find("オブジェクト名") を使ってカメラがアタッチされているオブジェクトを取得し、その後 GetComponent<Camera>() でカメラコンポーネントを取得します。
  • カメラオブジェクトの名前が変更されると、この方法では取得できなくなるため、名前の管理が重要です。

4. インスペクタでカメラを手動でアタッチ

カメラを操作するスクリプトに対して、Inspector から手動でカメラを割り当てることができます。これは、特定のカメラを事前にスクリプトに設定しておく場合に便利です。

サンプルコード:

public Camera myCamera; // Inspectorで設定するカメラ

説明:

  • スクリプトの public フィールドにカメラの参照を持たせ、Unity エディタ上でカメラを割り当てます。
  • 手動設定なので、柔軟にカメラを指定できます。

結論

この資料では、Camera.main を使用しないでカメラを取得するさまざまな方法を紹介しました。プロジェクトの要件に応じて最適な方法を選び、カメラの管理を効率化することが可能です。

技術の選定は、プロジェクトの複雑さやカメラの数によって異なるため、状況に応じて適切な手法を使い分けましょう。

Unity

Posted by hidepon