bevy-cameras について
Bevy 0.19でカメラを設定する開発者向けのスキルです。投影や照明の選択に加え、バージョン固有の設定上の注意点も扱います。
主な機能
- 01カメラと投影の設定
- 02テクスチャへの描画設定
- 03フリールックとパン操作
- 04カメラの描画順序
- 05カメラごとの環境光
- 06三人称カメラの設計指針
活用シーン
- 01ゲームのメインカメラ設定
- 02ミニマップやポータルのテクスチャ描画
- 03フリールックやパン操作の追加
- 04カメラオーバーレイの構成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-camerasインストール後、Claude Code で/bevy-camerasを入力して読み込まれたか確認します。
同梱ファイルreferences/third-person-orbit.md
詳細
Bevy 0.19 — カメラ
このスキルを使う場面
- ゲームのメインカメラを生成するとき。
- テクスチャにレンダリングするとき(ミニマップ、ポータル、ポストプロセスのターゲット)。
- 独自に実装せず、すぐに使えるフリールックまたはパン用のコントローラーが必要なとき。
- 異なる
orderを設定した複数のカメラでオーバーレイを構成するとき。 - カメラごとに環境光の明るさを設定するとき。
- 固定ポーズの補間と Rapier による遮蔽物のキャストを備えた、三人称視点のピボット/ブームカメラを構築するとき。
標準的なパターン
FreeCamera/PanCamera は Cargo の機能で有効化する必要があります。Cargo.toml に以下を追加します。
bevy = { version = "0.19", features = ["free_camera", "pan_camera"] }
use bevy::asset::RenderAssetUsages;
use bevy::camera::RenderTarget;
use bevy::camera_controller::free_camera::{FreeCamera, FreeCameraPlugin};
use bevy::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(FreeCameraPlugin) // adds the input wiring
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands, mut images: ResMut<Assets<Image>>) {
// 1. Main camera with the built-in free-look controller.
commands.spawn((
Camera3d::default(),
FreeCamera::default(),
Transform::from_xyz(0.0, 4.0, 8.0).looking_at(Vec3::ZERO, Vec3::Y),
));
// 2. A texture target for an off-screen render pass (mini-map, portal).
let size = bevy::render::render_resource::Extent3d {
width: 512,
height: 512,
depth_or_array_layers: 1,
};
let mut image = Image::new_fill(
size,
bevy::render::render_resource::TextureDimension::D2,
&[0; 4],
bevy::render::render_resource::TextureFormat::Bgra8UnormSrgb,
RenderAssetUsages::default(),
);
image.texture_descriptor.usage =
bevy::render::render_resource::TextureUsages::TEXTURE_BINDING
| bevy::render::render_resource::TextureUsages::COPY_DST
| bevy::render::render_resource::TextureUsages::RENDER_ATTACHMENT;
let image_handle = images.add(image);
// 3. A second camera that draws into the texture.
// RenderTarget is now a *separate* component, not Camera.target.
commands.spawn((
Camera3d::default(),
Camera { order: -1, ..default() }, // -1 = render before the main camera
RenderTarget::Image(image_handle.into()),
Transform::from_xyz(10.0, 5.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y),
));
}
投影方法の選択
use bevy::prelude::*;
use bevy::camera::Projection;
# fn _proj(mut commands: Commands) {
// Default perspective (45° vertical FOV).
commands.spawn((Camera3d::default(), Projection::default()));
// Orthographic for top-down or strategy views.
commands.spawn((
Camera3d::default(),
Projection::Orthographic(OrthographicProjection {
scale: 10.0,
..OrthographicProjection::default_3d()
}),
));
# }
環境光:ワールドのデフォルトとカメラごとの設定
use bevy::prelude::*;
use bevy::light::GlobalAmbientLight;
# fn _amb(app: &mut App, mut commands: Commands) {
// World default — applies everywhere unless a camera overrides.
app.insert_resource(GlobalAmbientLight {
brightness: 200.0,
..default()
});
// Per-camera override (`AmbientLight` is a Component).
commands.spawn((Camera3d::default(), AmbientLight { brightness: 1000.0, ..default() }));
# }
Bevy 0.19 での注意点
RenderTargetは独立したコンポーネントです。Camera { target: ... }は古い形式です。Camera3d/CameraとともにRenderTargetを生成してください。AmbientLightはResourceではなくなりました。 カメラごとのコンポーネントです。ワールドのデフォルトはGlobalAmbientLightリソースにあります。ImageRenderTarget::scale_factorはf32です(以前はFloatOrdでラップされていました)。- カメラの
orderは符号付きです。 値が小さいほど先にレンダリングされます。メインパスでサンプリングするオフスクリーンパスにはorder: -1を使います。 FreeCamera/PanCameraの使用には、それぞれのプラグインと Cargo の機能が必要です。features = ["free_camera", "pan_camera"]を追加してください。コンポーネントを生成するだけでは、入力システムは登録されません。- インポート:
bevy::camera::RenderTarget、bevy::camera_controller::{free_camera::*, pan_camera::*}、bevy::light::GlobalAmbientLight。いずれもプレリュードには含まれていません。
関連項目
- 三人称視点のオービットカメラ — ピボットとブームの分離、ピッチ制限、スムージング、固定補間、球キャスト、ヒステリシス、アクターのフェード。
bevy-rendering— レンダラーの選択、フォワード/ディファード、レンダリングシステム。bevy-input-actions— 再割り当て可能なカメラ/エイム入力と、マウスの差分を正しく渡す方法。bevy-physics— Rapier のシーンクエリの設定とフィルタリング。bevy-pbr-materials— ライティングとカメラに表示されるマテリアル。bevy-a11y— 視野角、画面の揺れ、動き、ビューポートのアクセシビリティ。
コメント
Markdown 対応