はじめに
Camera2D とは?
Camera2D
映画のカメラマンが被写体を追いながら動くように、ゲームのカメラもプレイヤーキャラクターを追いながら画面を映し出す—それが Camera2D です。
Node2D
このノードを使うべき場面
- プレイヤーキャラクターを追従する、横スクロールアクションゲーム
- マップ全体を見守る俯瞰視点のRPG
- ボス戦闘時に、ボスをズームして見せるカメラワーク
- パンニング(画面のスクロール)や揺れ(シェイク)の演出が必要なシーン
- マップの端まで来たときに、カメラが端で止まる処理(バウンダリ設定)
こういうときは他を検討:
主なプロパティと機能
| プロパティ名 | 説明 | デフォルト値 |
|---|---|---|
enabled | カメラが有効か無効か。false にするとカメラは動かない | true |
global_position | カメラの位置(ゲーム世界座標系) | 依存 |
zoom | ズームレベル。1.0 が等倍、2.0 で2倍に拡大 | 1.0 |
limit_left, limit_right, limit_top, limit_bottom | カメラが移動できる範囲を制限(マップの端など) | -10000000 〜 10000000 |
drag_horizontal_enabled | プレイヤーが画面中央から左右にずれたときのカメラの滑らかさ | true |
drag_vertical_enabled | プレイヤーが画面中央から上下にずれたときのカメラの滑らかさ | true |
position
# プレイヤーを追従する基本パターン
extends Node2D
@onready var camera = $Camera2D
@onready var player = $Player
func _process(delta):
# カメラをプレイヤーの位置に合わせる
camera.global_position = player.global_position
# プレイヤーが子ノードを持つ場合、カメラは親の動きに自動で付く
# Player スクリプト内で Position2D を更新すれば、
# Camera2D はその変更を受け継ぐ
func _process(delta):
self.position += velocity * delta
もっと使いこなす:カスタマイズできるパラメータ
ズーム機能で画面サイズを動的に変える
# ボス登場時にズームインする演出
@onready var camera = $Camera2D
func boss_appear():
var tween = create_tween()
tween.tween_property(camera, "zoom", Vector2(1.5, 1.5), 1.0)
# 1秒かけて 1.5 倍にズーム
カメラシェイク(揺れ)で緊迫感を演出
# カメラを揺らす
func shake_camera(duration: float, strength: float):
var original_offset = camera.offset
var elapsed = 0.0
while elapsed < duration:
camera.offset = original_offset + Vector2(
randf_range(-strength, strength),
randf_range(-strength, strength)
)
elapsed += get_process_delta_time()
await get_tree().process_frame
camera.offset = original_offset
マップの端でカメラを止める(リミット設定)
| パラメータ | 説明 | 活用例 |
|---|---|---|
limit_left | カメラが左に移動する最小位置 | マップの左端を 0 に設定 |
limit_right | カメラが右に移動する最大位置 | マップの横幅が 1600 なら 1600 に設定 |
limit_top | カメラが上に移動する最小位置 | マップの上端を 0 に設定 |
limit_bottom | カメラが下に移動する最大位置 | マップの縦幅が 900 なら 900 に設定 |
# マップが 1600x900 の場合
@onready var camera = $Camera2D
func _ready():
camera.limit_left = 0
camera.limit_right = 1600
camera.limit_top = 0
camera.limit_bottom = 900
ドラッグスムース設定で追従のなめらかさを調整
# スムーズな追従を有効化
@onready var camera = $Camera2D
func _ready():
camera.drag_horizontal_enabled = true
camera.drag_vertical_enabled = true
# さらに細かく調整したい場合、drag_horizontal_speed などもある
複数の Camera2D を切り替える
# ボス戦用カメラに切り替え
@onready var player_camera = $PlayerCamera
@onready var boss_camera = $BossCamera
func enter_boss_battle():
player_camera.enabled = false
boss_camera.enabled = true
まとめ
Camera2D は、ゲーム世界を「どう見せるか」を制御する目玉ノード
- 基本は「position をプレイヤーに合わせる」だけで十分動く
- zoom、shake、limit などを組み合わせれば、ゲームの雰囲気が大きく変わる
- 複数のカメラを切り替えることで、シーンごとに視点を変えられる
関連性の高いノード解説記事
- . ノード解説「Node」
- . ノード解説「Node2D」
- . ノード解説「Sprite2D」
- . ノード解説「CharacterBody2D」
- . ノード解説「Area2D」
- . ノード解説「CollisionShape2D」
- . ノード解説「AnimatedSprite2D」
- . ノード解説「Timer」
- . ノード解説「Camera2D」(このページ)
- . ノード解説「CanvasLayer」
- . ノード解説「Control」
- . ノード解説「Label」
この記事は Godot 4.x をもとに執筆しています。



コメント