UnityのCameraクラスについての技術資料

2026年10月8日

広告

Cameraクラスは、Unityでゲーム内の視点や描画を管理するための重要なクラスです。この資料では、Cameraクラスのプロパティやメソッドを中心に、具体的な使用例を含めて解説します。

Cameraクラスの主なプロパティ

Cameraの視野角(fieldOfView)を30度と90度で比べた図と、nearClipPlaneとfarClipPlaneで描画する範囲が決まる様子の図解
backgroundColorはClear FlagsがSolid Colorのときに効くことと、targetTextureでRenderTextureに描画する流れの図解
  • fieldOfView: カメラの視野角を設定します。標準では縦方向の角度です(インスペクターの Field of View Axis が Vertical のとき。Horizontal にすると横方向の角度になります)。この値を変えることで、カメラの視野を広げたり狭めたりできます。通常の視野角は60度程度です。視野角が効くのは、透視投影(orthographic が false)のときだけです。
    • デフォルト値: 60
    • 使用例: camera.fieldOfView = 75;
  • nearClipPlane: カメラが描画する最も近い距離を設定します(インスペクターでは Clipping Planes の Near)。これより手前にあるオブジェクトは描画されません。
    • デフォルト値: 0.3
    • 使用例: camera.nearClipPlane = 0.1f;
  • farClipPlane: カメラが描画する最も遠い距離を設定します(インスペクターでは Clipping Planes の Far)。これより遠くにあるオブジェクトは描画されません。
    • デフォルト値: 1000
    • 使用例: camera.farClipPlane = 500;
  • backgroundColor: カメラの背景色を設定します。これは、ゲーム内で空などのオブジェクトがない場所を描画する際の色を指定します。ただし、Background Type(Built-in では Clear Flags)が Solid Color のときだけ有効です。標準の Skybox のままでは、Color.black を代入しても画面は変わりません。
    • 使用例: camera.backgroundColor = Color.black;
  • orthographic: このプロパティがtrueの場合、カメラは正投影(Orthographic)モードで動作し、パースペクティブ効果が無効になります。
    • 使用例: camera.orthographic = true;
  • targetTexture: カメラの描画結果をRenderTextureに出力します(インスペクターでは Output の Output Texture)。これは画面上の出力を別のテクスチャとして扱いたい場合に使います。
    • 使用例: camera.targetTexture = myRenderTexture;
PerspectiveとOrthographicの違い。遠近法では遠くのものが小さく、平行投影では同じ大きさに見えることを示した図

Cameraクラスの主なメソッド

ScreenToWorldPoint、WorldToScreenPoint、ViewportToWorldPoint、ScreenPointToRayの動きを示した図解
  • ScreenToWorldPoint(Vector3 position): 画面上の2D座標(ピクセル座標)をワールド空間の3D座標に変換します。例えば、クリックされた位置をワールド座標に変換する際に利用します。引数の z は「カメラからの距離」を表し、下の例ではカメラの10ユニット前方の位置になります。z を 0 のままにすると、3Dカメラではカメラ自身の位置が返ります。また、この関数ではクリックしたオブジェクトは分かりません。3Dで物体を調べたいときは Raycast を使います(【Unity】クリックしたオブジェクトの位置を取得する Raycast入門で解説しています)。Mouse を使うには、スクリプトの先頭に using UnityEngine.InputSystem; が必要です。
    • 使用例: Vector2 mousePos = Mouse.current.position.ReadValue();
      Vector3 worldPosition = camera.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, 10));
  • ScreenPointToRay(Vector3 position): 画面上の点から、カメラを起点として3D空間へ伸びる光線(Ray)を作ります。座標を変換するのではなく、線を作る関数です。Physics.Raycast() に渡すと、最初に当たった Collider が分かります。クリックした物体を調べるときは、この組み合わせを使います(【Unity】クリックしたオブジェクトの位置を取得する Raycast入門で解説しています)。
    • 使用例: Ray ray = camera.ScreenPointToRay(Mouse.current.position.ReadValue());
  • WorldToScreenPoint(Vector3 position): ワールド空間の3D座標を画面上の2D座標に変換します。これは、オブジェクトの位置をユーザーインターフェースで表示する際に役立ちます。戻り値の z はカメラからの距離で、負の値のときはオブジェクトがカメラの背後にあります。UI を追従させるときは、z が 0 より大きいことを確認します。
    • 使用例: Vector3 screenPosition = camera.WorldToScreenPoint(objectPosition);
  • ViewportToWorldPoint(Vector3 position): ビューポート(0から1までの相対座標)をワールド空間の座標に変換します。3番目の値は、ScreenToWorldPoint と同じくカメラからの距離です。
    • 使用例: Vector3 worldPosition = camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10));
  • Render(): カメラがシーンを手動で描画します。通常、自動的に呼ばれるため、特定のシチュエーションでのみ使用されます。
    • 使用例: camera.Render();

サンプルスクリプト

以下に、キーボード入力でカメラの視野角(fieldOfView)を動的に変更する簡単なスクリプトを紹介します。

using UnityEngine;
using UnityEngine.InputSystem;

public class CameraControl : MonoBehaviour
{
    public Camera mainCamera;
    public float speed = 30f; // 1秒あたりに変化させる視野角(度)

    void Update()
    {
        Keyboard keyboard = Keyboard.current;
        if (keyboard == null) return;

        // 上矢印キーで視野角を広げる
        if (keyboard.upArrowKey.isPressed)
        {
            mainCamera.fieldOfView += speed * Time.deltaTime;
        }
        // 下矢印キーで視野角を狭める
        if (keyboard.downArrowKey.isPressed)
        {
            mainCamera.fieldOfView -= speed * Time.deltaTime;
        }

        // 視野角が極端な値にならないように制限する
        mainCamera.fieldOfView = Mathf.Clamp(mainCamera.fieldOfView, 20f, 100f);
    }
}

このスクリプトでは、上矢印キー(upArrowKey)で視野角を広げ、下矢印キー(downArrowKey)で狭めます。ポイントは2つです。

  • Time.deltaTime を掛けているので、フレームレートが違っても同じ速さで変化します。
  • Mathf.Clamp で、視野角を20〜100度の範囲に制限しています。

このスクリプトは、シーン内の任意の GameObject に付ければ動きます。インスペクターの Main Camera 欄には、シーンの Main Camera をドラッグして設定します。スクリプトから Camera.main で取得する方法は、UnityのCamera.mainとは? GetComponent<Camera>()との違いを理解しようで解説しています。キー入力には Input System の Keyboard を使っています。旧 Input Manager の Input.GetKey() は、Input System のみのプロジェクトではエラーになります。Input System の基本はUnity 6でキー入力による移動を実装する ― Input Systemの基本で解説しています。

まとめ

Cameraクラスはゲーム内の視点をコントロールするために非常に重要なクラスです。カメラの視野角やクリッププレーンを調整することで、プレイヤーにどのようにシーンを見せるかを細かく調整することが可能です。これを利用することで、より魅力的でダイナミックなゲーム体験を提供できます。

訪問数 174 回, 今日の訪問数 1回

広告

Unity

Posted by hidepon