mcpField
B
bevy-cameras

bevy-cameras

github.com/chrisgliddon開発2692 回インストール9 週間前に更新
リポジトリ

bevy-cameras について

Bevy 0.19でカメラを設定する開発者向けのスキルです。投影や照明の選択に加え、バージョン固有の設定上の注意点も扱います。

主な機能

  1. 01カメラと投影の設定
  2. 02テクスチャへの描画設定
  3. 03フリールックとパン操作
  4. 04カメラの描画順序
  5. 05カメラごとの環境光
  6. 06三人称カメラの設計指針

活用シーン

  1. 01ゲームのメインカメラ設定
  2. 02ミニマップやポータルのテクスチャ描画
  3. 03フリールックやパン操作の追加
  4. 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 — 視野角、画面の揺れ、動き、ビューポートのアクセシビリティ。

コメント