はじめに
3Dシーンを作ったけれど、実際にプレイヤーがどんな角度で見るのか?その視点を決めるのがCamera3Dです。この記事では、3D空間を映すカメラの基本から、視点の切り替えまで解説します。
この記事を読むことで、TPSカメラ、FPSカメラ、シネマティック演出の基礎が身につきます。

Camera3Dとは?
Camera3Dは、3D空間を映すカメラノードです。ゲーム画面に映る風景や登場人物は、すべてこのカメラが「何を見ているか」によって決まります。
Camera3Dは「プレイヤーの目」です。シーンをどんな角度からどんな広さで見るかを完全に制御します。
継承ツリー:
Camera3D
├── Node3D
│ ├── Node
│ └── ...
└── ...
このノードを使うべき場面
Camera3Dを使う場面:
- メインゲームの視点(TPSカメラ、FPSカメラ)
- シネマティックなカットシーン・イベントシーンの演出
- 複数のカメラを切り替える演出(ボス戦での演出カメラ等)
- 監視カメラやミニマップの視点
- 3D空間を俯瞰して見るパズルゲームのカメラ
Camera3Dを使わない場面:
- 2Dゲームの場合 → Camera2D を使う
- カメラが一切不要な(または自動で設置される)プロジェクト
主なプロパティと機能
| プロパティ | 型 | 説明 |
|---|---|---|
current |
bool | trueの場合、このカメラがアクティブ(実際に映される) |
projection |
ProjectionType | PERSPECTIVE(透視投影)か ORTHOGONAL(正投影) |
fov |
float | 視野角(PERSPECTIVE用)。単位は度。デフォルト75° |
size |
float | 見える領域の高さ(ORTHOGONAL用) |
near |
float | カメラからの最短距離。これより近いオブジェクトは表示されない |
far |
float | カメラからの最長距離。これより遠いオブジェクトは表示されない |
environment |
Environment | 空色、グローバル照明などの環境設定 |
attributes |
CameraAttributes | 露出値(EV)など、カメラの高度な設定 |
重要メソッド:
# このカメラをアクティブにする
make_current()
# 画面上の座標から、ワールド座標の3D光線を取得
project_ray_from_screen(screen_position: Vector2)
# ワールド座標から、スクリーン上の2D座標に変換
unproject_position(world_position: Vector3)
# ビューマトリックスと投影マトリックスを取得
get_camera_transform()
get_projection()
# カメラのZ値(深度)を設定して、その距離を基準にする
set_orthogonal(size: float, z_near: float, z_far: float)
set_perspective(fov: float, z_near: float, z_far: float)
コード例1:基本的なTPSカメラ(プレイヤーの後ろを追う)
extends Camera3D
@export var distance: float = 5.0 # プレイヤーからの距離
@export var height: float = 2.0 # カメラの高さ
@export var smooth_speed: float = 10.0 # スムーズさ
@onready var player = get_parent()
func _process(delta: float) -> void:
# プレイヤーの背後にカメラを配置
var target_position = player.global_position
target_position -= player.global_transform.basis.z * distance # Z軸に沿って後ろに
target_position.y += height # 高さを調整
# スムーズにカメラを移動
global_position = global_position.lerp(target_position, smooth_speed * delta)
# プレイヤーを見つめる
look_at(player.global_position + Vector3(0, height * 0.5, 0), Vector3.UP)
# このカメラをアクティブに
make_current()
コード例2:視野角(FOV)を動的に変更(ズーム効果)
extends Camera3D
@export var default_fov: float = 75.0
@export var sprint_fov: float = 90.0
@export var zoom_speed: float = 10.0
func _process(delta: float) -> void:
var target_fov = default_fov
# スプリント時は視野角を広げる
if Input.is_action_pressed("sprint"):
target_fov = sprint_fov
# スムーズにFOVを変更
fov = lerp(fov, target_fov, zoom_speed * delta)
# マウスホイールでズーム
if Input.is_action_just_released("scroll_up"):
fov = max(fov - 5.0, 30.0) # 最小30°
elif Input.is_action_just_released("scroll_down"):
fov = min(fov + 5.0, 120.0) # 最大120°

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ | 型 | 説明 |
|---|---|---|
v_offset |
float | カメラの垂直オフセット。キャラの目の高さを調整 |
h_offset |
float | カメラの水平オフセット。OTS(オーバーザショルダー)カメラ用 |
doppler_tracking |
DopplerTracking | ドップラー効果の追跡。IDLE/OBJECTS/PHYSICS_BODIES |
cull_mask |
int | 描画レイヤーの選別。特定のレイヤーのみ描画 |
physics_interpolation_mode |
PhysicsInterpolationMode | 物理フレームとレンダリングフレームの同期方法 |
まとめ
Camera3Dはシーンの「見え方」を完全に制御し、TPSカメラ・FPSカメラ・シネマティック演出など、様々なゲーム体験の基盤となるノードです。
- current プロパティを true にすることでそのカメラがアクティブになり、画面に映される
- projection でPERSPECTIVE(透視投影)とORTHOGONAL(正投影)を切り替え、異なる見え方が実現できる
- fov や near/far を調整して、ゲーム体験を細かくコントロール可能
次回は、3D空間を照らすライトノード、DirectionalLight3Dについて解説します。

シリーズ:Godot 4 ノード解説
001〜040:各種ノード
- 001 Node2D
- 002 Sprite2D
- 003 AnimatedSprite2D
- 004 Label
- 005 Button
- 006 TextEdit
- 007 Panel
- 008 VBoxContainer / HBoxContainer
- 009 TabContainer
- 010 OptionButton
- 011 CheckBox
- 012 Slider
- 013 LineEdit
- 014 RichTextLabel
- 015 Control
- 016 NinePatchRect
- 017 TextureRect
- 018 ItemList
- 019 Tree
- 020 ColorPickerButton
- 021 Timer
- 022 AudioStreamPlayer / AudioStreamPlayer2D
- 023 Marker2D
- 024 Area2D
- 025 CharacterBody2D
- 026 RigidBody2D
- 027 StaticBody2D
- 028 TileMap
- 029 Camera2D
- 030 CollisionShape2D
- 031 Polygon2D
- 032 Line2D
- 033 ParticleSystem2D / CPUParticles2D
- 034 CanvasLayer
- 035 Sprite3D
- 036 SubViewport
- 037 MultiplayerSpawner
- 038 RemoteTransform2D
- 039 NavigationAgent2D
- 040 VisibleOnScreenNotifier2D
- 051 Node3D
- 052 MeshInstance3D
- 053 Camera3D
- 054 DirectionalLight3D
- 055 CharacterBody3D
この記事はGodot 4.xをもとに執筆しています。


コメント