4.

Unity Camera 完全ガイド(Perspective / Orthographic / Cinemachine / URP)

編集
この記事の要点
  • Unity の Camera コンポーネントはシーンの「目」。Hierarchy に最低 1 つは Main Camera が必要
  • Projection: Perspective(3D の遠近感)と Orthographic(2D / RTS 用の平行投影)
  • 主要パラメータ: Field of View(画角)/ Clipping Planes(描画距離)/ Viewport Rect(画面内位置)
  • Cinemachine がカメラ制御のデファクト。追従・カット・手ブレ・障害物回避を宣言的に
  • URP / HDRP では Camera Stack(オーバーレイ)や Volume(被写界深度等)が追加

Unity の Camera コンポーネント

Unity の Camera は、シーンを画面に描画する「目」の役割を担うコンポーネントです。新規シーンには「Main Camera」が 1 つ配置されており、Tag が MainCamera になっています。スクリプトから Camera.main で参照できる便利なやつです。

Unity Camera コンポーネント

主要パラメータ一覧

項目説明
Clear Flags毎フレームのクリア方法(Skybox / Solid Color / Depth only / Don't Clear)
BackgroundSolid Color 時の塗り色
Culling Mask描画する Layer を選択。UI 専用カメラ等で使う
ProjectionPerspective(遠近感) / Orthographic(平行投影)
Field of ViewPerspective の画角(縦方向の度数、既定 60)
SizeOrthographic の表示半高さ(ワールド単位)
Clipping Planes (Near/Far)描画距離。Near 0.3、Far 1000 が既定
Viewport Rect画面のどの矩形に描くか(0〜1 正規化)。分割画面に
Depth複数カメラの描画順(小→大の順で重ねる)
Rendering PathForward / Deferred 等(パイプライン依存)
Target TextureRenderTexture に描画(ミニマップ・ポータル等)
HDR / MSAA / Allow Dynamic Resolutionレンダリング品質

Perspective と Orthographic

Projection特徴典型用途
Perspective遠くは小さく見える(人間の目に近い)3D アクション / FPS / 一般的なゲーム
Orthographic遠近感なし。すべて同じスケール2D ゲーム / RTS / 等角投影 / UI

Field of View の感覚値

FoV (度)用途
30〜45狙撃・スコープ
60〜75一般 3rd Person / 落ち着いた画
75〜90★ FPS の標準(広め)
100〜110動きの激しい FPS、VR 自由視点
120 以上魚眼風 / 演出

Clipping Planes の注意

Near を 0.3 と既定にしてあるのは、Z バッファの精度が Near と Far の比率で決まるためです。Near を 0.01 まで下げて Far を 10000 にすると Z ファイティング(点滅)が起きます:

// ❌ NG: 比率が大きすぎる
camera.nearClipPlane = 0.01f;
camera.farClipPlane  = 10000f;
// → ratio = 1,000,000 → Z ファイティング

// ✅ OK: 比率は 10000〜100000 程度に抑える
camera.nearClipPlane = 0.3f;
camera.farClipPlane  = 1000f;

Viewport Rect で分割画面

// 2 人プレイの上下分割
playerOneCamera.rect = new Rect(0, 0.5f, 1, 0.5f);  // 上半分
playerTwoCamera.rect = new Rect(0, 0,    1, 0.5f);  // 下半分

// 左右分割
playerOneCamera.rect = new Rect(0,   0, 0.5f, 1);
playerTwoCamera.rect = new Rect(0.5f, 0, 0.5f, 1);

// ミニマップ(右上の小窓)
miniMap.rect = new Rect(0.75f, 0.75f, 0.25f, 0.25f);
miniMap.depth = playerOneCamera.depth + 1;  // 重ねる

複数カメラと Depth

UI 専用カメラやミニマップなど、複数のカメラを使うときは Depth が描画順を決めます。値が大きいカメラが手前に描画されます。重ねる場合は奥のカメラの Clear Flags を Solid Color、手前を Depth only にするのが基本構成。

Cinemachine(カメラ制御のデファクト)

Unity 公式の Cinemachine パッケージは、追従カメラ / 視点切替 / カットシーン / 障害物回避 / 手ブレ風効果をコード書かずに実現できる定番ツールです。新規プロジェクトは基本これを採用。

Window → Package Manager → Cinemachine → Install
→ GameObject → Cinemachine → Virtual Camera

主要 Virtual Camera タイプ:
- CinemachineVirtualCamera : 単体カメラ。Follow / LookAt 設定
- CinemachineFreeLook       : 3 段階の高さで自由視点(3rd Person)
- CinemachineBlendListCamera : 複数カメラのブレンド遷移
- CinemachineClearShot       : 障害物が無い角度を自動選択
- CinemachineDollyTrack + DollyCart : レール上を動かす(映画的カット)

主要 Extension:
- CinemachineCollider        : 障害物に当たらないよう自動回避
- CinemachineImpulse         : 爆発などの揺れ
- CinemachineConfiner        : カメラを領域内に閉じ込める

スクリプトでカメラ制御

using UnityEngine;

public class FollowCamera : MonoBehaviour
{
    public Transform target;
    public float distance = 5f;
    public float height = 2f;
    public float smooth = 5f;

    void LateUpdate()  // 物理 / Update の後で動かす(カクつき防止)
    {
        if (!target) return;

        Vector3 desired = target.position - target.forward * distance + Vector3.up * height;
        transform.position = Vector3.Lerp(transform.position, desired, Time.deltaTime * smooth);
        transform.LookAt(target.position + Vector3.up * 1.5f);
    }
}

// ワールド ↔ スクリーン座標の変換
Camera cam = Camera.main;
Vector3 screen = cam.WorldToScreenPoint(player.position);
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hit)) { /* クリック対象 */ }

URP / HDRP の追加機能

機能用途
Camera Stack(URP)Base + Overlay 構成。UI カメラを重ねる現代手法
Volume + Post-ProcessBloom / Depth of Field / Color Adjustments など被写界深度等のポスト処理
Camera Anti-aliasingFXAA / SMAA / TAA
Renderer FeaturesOutline / Decal などをパイプラインに追加
Physical Camera(HDRP)焦点距離 / センサーサイズ / 絞り等の実写的設定

典型的なハマりどころ

症状原因対処
真っ黒 / Skybox が映らないClear Flags が Don't ClearSkybox に戻す
UI だけ消えるCulling Mask が UI Layer を除外UI チェック
カメラがカクつくUpdate で動かしているLateUpdate に
遠景がチラつくNear / Far 比が大きいNear を上げる
FoV を変えると酔うVR / FPS で広すぎる60〜80 度で再調整
Camera.main が nullMainCamera Tag が未設定Tag を MainCamera に

FAQ

Q: 2D ゲームで Orthographic Size をどう決める?
A: Size = 画面縦のワールド単位 / 2。100 ppu のスプライトでフル HD 縦 1080 をワールド 10 で見せたいなら Size = 5。

Q: Cinemachine と素のカメラ制御、どちらが推奨?
A: 新規は Cinemachine を強く推奨。Damping / 障害物回避 / 切替が容易で、コード量が激減します。

Q: マルチカメラとシングルカメラ、どちらが軽い?
A: シングルが軽量。マルチカメラはレンダリングコストが線形に増えるので、UI Camera Stack 等で必要なときのみ。

編集
Post Share
子ページ
  1. キャラクター(オブジェクト)視点のカメラの作成
  2. 背景を変える方法
同階層のページ
  1. オブジェクトの追加方法
  2. 地形
  3. キャラクター
  4. カメラ

最近更新/作成されたページ