mcpField
B
bevy-migration-0-18-to-0-19

bevy-migration-0-18-to-0-19

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

bevy-migration-0-18-to-0-19 について

Bevy プロジェクトを 0.18 から 0.19 に移行する開発者向けのリファレンスです。重要な API、機能、エコシステムの変更を整理し、アップグレードの検証チェックリストも掲載しています。

主な機能

  1. 01重要な API 変更の対照表
  2. 02リソースとクエリの移行案内
  3. 03テキスト、シーン、描画の更新
  4. 04機能とエコシステムの互換性情報
  5. 05アップグレード検証チェックリスト

活用シーン

  1. 01Bevy 0.19 への更新計画
  2. 02移行に伴うビルドエラーの解決
  3. 03機能構成と対象環境のビルド確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/chrisgliddon/bevy-skills --skill bevy-migration-0-18-to-0-19

インストール後、Claude Code で/bevy-migration-0-18-to-0-19を入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
rendering-assets-and-api.md
resources-as-components.md
scene-serialization.md
text-and-fonts.md

詳細

Bevy 0.18 → 0.19 の移行

Bevy 0.19.0 は 2026-06-19 にリリースされました。bevy = "0.19" を指定し、最新の 0.19 パッチリリースで検証してください。公式の移行ガイドを最初から最後まで適用してください。このスキルでは、ゲームコードと関連するスキルに影響する可能性が高い変更を優先しています。

最初に確認するチェックリスト

  1. エンジンと Bevy エコシステムのすべてのクレートをまとめて更新してください。Bevy 0.18 用にビルドされたクレートは、Bevy 0.19 の ECS/アセット/レンダリングの型と共有できません。
  2. プロジェクトで実際に使用する default-features とターゲットトリプルで再ビルドしてください。
  3. 二次的なシステムエラーを追う前に、リソースと広範なクエリの競合を修正してください。
  4. シーン、テキスト、アセット、レンダリング、ライト、UI フォーカスを更新してください。
  5. 永続化されたアニメーションターゲット ID とシリアライズ済みのワールドデータを再生成してください。
  6. 代表的なサンプルをコンパイルし、ネイティブおよび Web/プラットフォーム向けビルドを動作確認してください。

影響の大きい変更

Bevy 0.18Bevy 0.19
#[derive(Component, Resource)]別々の型に分割。Resource: Component
広範なクエリと Res<T>該当する場合、Without<IsResource> でリソースエンティティを除外
init_non_send_resourceinit_non_send
SceneRoot / DynamicSceneWorldAssetRoot / DynamicWorld
bevy_scene の旧ワールドシリアライズbevy_world_serialization
TextFont { font: Handle<_>, font_size: f32 }FontSource と FontSize
TextLayout::new_with_justifyTextLayout::justify
LoadContext::loader()LoadContext::load_builder()
AsyncSeekForward を使うカスタム Reader必須になった Reader::seekable()
ViewNode とカメラのレンダーグラフノードCore2d / Core3d スケジュール内のシステム
Replace、on_replaceDiscard、on_discard
set_executor_kind(ExecutorKind::...)executor インスタンスを渡す set_executor(...)
ライトの shadows_enabledshadow_maps_enabled と、任意の contact_shadows_enabled
カメラ上の Atmosphere独立した bevy::light::Atmosphere エンティティ
公開されていた InputFocus.0get、set、clear メソッド

レンダーノード API は廃止されましたが、カメラ以外のトップレベルスケジュールである bevy::render::renderer::RenderGraph は引き続き存在します。このスケジュール名を機械的に置き換えないでください。

テキストとシーン

TextFont {
    font: asset_server.load("fonts/FiraSans-Bold.ttf").into(),
    font_size: FontSize::Px(24.0),
    ..default()
}

commands.spawn(WorldAssetRoot(
    asset_server.load("models/level.glb#Scene0"),
));

テキストシェーピングとフォールバックは Parley/fontique が提供するようになりました。インストール済みフォントファミリーの検出には、system_font_discovery フィーチャーが必要です。従来のシリアライズシステムは BSN 用の名前を確保するために改名されました。glTF のルートには、BSN のシーン型ではなく、引き続き WorldAssetRoot を使用します。

テキストとフォントおよびシーンのシリアライズを参照してください。

リソースとジェネリッククエリ

Res<T> と ResMut<T> は、引き続き通常の API です。意味上の変更点は、リソースの値がシングルトンエンティティに格納され、#[derive(Resource)] が Component も実装することです。その結果、コンポーネントを広範に検索するクエリがリソースアクセスと競合したり、意図せずリソースエンティティを含めたりする可能性があります。

fn inspect_entities(
    entities: Query<EntityRef, Without<IsResource>>,
    settings: Res<GameSettings>,
) {
    // ...
}

すべてのクエリに機械的に Without<IsResource> を追加しないでください。通常のエンティティだけを対象とするクエリに限って絞り込んでください。コンポーネントとしてのリソースを参照してください。

フィーチャーとエコシステムのクレート

[dependencies]
bevy = { version = "0.19", default-features = false, features = [
  "3d", "ui", "audio"
] }
  • audio は 2d、3d、ui によって暗黙的に有効にならなくなりました。
  • ui は 2d または 3d によって暗黙的に有効にならなくなりました。
  • プロファイルコレクションは default-features = false と組み合わせて使用する必要があります。そうしないと、Cargo のフィーチャー統合によってデフォルトフィーチャーが引き続き有効になります。
  • デフォルトフィーチャーを無効にする場合、ネイティブのコントローラーイベントには bevy_gilrs バックエンドが必要です。
  • bevy_capture 0.6 と bevy_hanabi 0.19 は Bevy 0.19 を対象としています。他のすべての依存関係についても、クレートのバージョンから推測せず、宣言されている Bevy のバージョンを確認してください。

その他の移行元

  • InputFocus は DefaultPlugins によって初期化されます。Bevy 0.19.1 では focus.set(entity, FocusCause::Navigated) を呼び出してください。1 引数の 0.19.0 の例は パッチ適用前のものです。
  • シリアライズされた AnimationTargetId の値を再計算してください。ハッシュ/ID アルゴリズムが変更されています。
  • glTF の #Material0 ラベルは GltfMaterial を返すようになりました。PBR 変換が有効な場合に Handle<StandardMaterial> を取得するには /std を追加してください。
  • 高度な読み込みは AssetServer::load_builder を経由するようになりました。ネストされた読み込みには LoadContext::load_builder を使用してください。
  • EasyScreenRecordPlugin の手動リテラルには output_dir が必要です。..default() を使用すれば、すでに設定されています。
  • FeathersPlugin は FeathersCorePlugin に変更されましたが、プラグイングループは引き続き FeathersPlugins です。

レンダリング、アセット、APIを参照してください。

移行を検証する

cargo check --all-targets
cargo test
cargo tree -d | rg 'bevy(_| )'

Bevy のメジャー/マイナーバージョンが重複している場合は、無害な Cargo のノイズではなく、互換性の問題として扱ってください。また、サポート対象のすべての機能プロファイルとターゲットでビルドしてください。デフォルトのデスクトップビルドだけでは、default-features = false や WASM の検証にはなりません。

関連項目

コメント