bevy-porting について
bevy-portingは、ゲームを他のエンジンからBevy 0.19へ移植する開発者向けのガイドです。エンジン別の解説と、元のエンジンをインストールせずにプロジェクトデータを調査・抽出するスクリプトを備えています。
主な機能
- 0110種類の移植元エンジンを解説
- 02Unityのサブシステム別移植資料
- 03Pythonによるアセット・シーン調査スクリプト
- 04Bevy ECSとタイムステップの移行指針
- 05ビルドパイプラインの移行ガイド
活用シーン
- 01エンジン機能にBevyでの対応方法があるか評価
- 02最小のプレイ可能な範囲から移植を計画
- 03元プロジェクトのアセットやシーンデータを抽出
- 04Cargo設定でエンジンのビルド設定を置き換え
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill bevy-portingインストール後、Claude Code で/bevy-portingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cocos.mddefold.mdflash-swf.mdgamemaker.mdgodot.mdjavascript.mdphaser.mdroblox.mdunity-animation.mdunity-architecture.mdunity-assets.mdunity-audio.mdunity-build.mdunity-input.mdunity-scenes-gltf.mdunity-ui.mdunreal.mdscripts/flash/swf_assets.pyscripts/gamemaker/gms2_inventory.pyscripts/godot/tscn_inventory.pyscripts/roblox/rbxlx_inventory.pyscripts/unity/animation_extractor.pyasset_audit.pyprefab_inspector.pyscene_inventory.pyscripts/unreal/ue5_python_export.py詳細
Bevy 0.19 — 他のエンジンからの移植
このスキルを使う場面
- Unity、Unreal、Godot、Cocos、バニラ JavaScript/Phaser、Flash/SWF、Defold、Roblox、GameMaker の既存ゲームを Bevy 0.19 に移植し始めるとき。
- 実現可能性を評価するとき — 使用中のエンジンの機能 X に相当するものは Bevy 0.19 にありますか?
- どのサブシステムから移植するかを決めるとき(おすすめ:レンダリングと、プレイ可能なスライスを 1 つ)。
- ソースエンジンをインストールせずに、ソースエンジンのプロジェクトツリーからアセットとシーンのデータを抽出するとき — 下記の
scripts/のポリシーを参照してください。 - エンジン固有のビルドパイプライン(Unity Build Settings、Unreal Build Configuration など)を
cargo+Cargo.tomlの機能に置き換えるとき。
エンジンの対応状況
| エンジン | 対応状況 | スクリプト |
|---|---|---|
| Unity | 詳細(サブシステムのリファレンス 8 件)— 下記の § Unity を参照 | scripts/unity/ に 4 つの Python 抽出ツール |
| Unreal Engine 5 | references/unreal.md — Actor/Component → ECS、UMG → bevy_ui、Niagara/アニメーションの不足点 | scripts/unreal/ue5_python_export.py(UE5 エディターに配置) |
| Godot 4 | references/godot.md — ノードツリー → ECS、.tscn テキスト形式、GDScript → Rust | scripts/godot/tscn_inventory.py(標準ライブラリを使用、Godot は不要) |
| Cocos Creator 3 | references/cocos.md — TypeScript のノードツリー → ECS、JSON の .scene/.prefab | リファレンス内の Python レシピ |
| バニラ JavaScript/Canvas/HTML5 | references/javascript.md — クラスと rAF のループ → ECS システム、Canvas 2D → Sprite | —(移植は抽出ではなく書き直しです) |
| Phaser 3 | references/phaser.md — Scene/preload/update → システム、Arcade physics、トゥイーン | — |
| Flash/SWF | references/flash-swf.md — ffdec を使用した抽出、AS3 → Rust への書き直し | scripts/flash/swf_assets.py(PATH 上に ffdec が必要) |
| Defold | references/defold.md — メッセージパッシング → Bevy の Message、Lua → Rust、2D を優先 | リファレンス内の Python レシピ |
| Roblox | references/roblox.md — Instance ツリー → ECS、アセット ID の抽出、Luau → Rust | scripts/roblox/rbxlx_inventory.py(XML の .rbxlx のみ) |
| GameMaker Studio 2 | references/gamemaker.md — オブジェクトイベント → システム、JSON プロジェクトファイル | scripts/gamemaker/gms2_inventory.py(標準ライブラリを使用し、.yyp を走査) |
Unity(優先度高)
Unity は最も詳しく扱っているエンジンです。8 つのサブシステムのリファレンスと 4 つの抽出スクリプトを組み合わせることで、移植を一通りカバーできます。
| サブシステム | リファレンス | Bevy のプリミティブ |
|---|---|---|
| アーキテクチャ(GameObject、MonoBehaviour、ScriptableObject、コルーチン) | references/unity-architecture.md | Entity + ChildOf、Component + System、Asset/Resource、非同期タスク |
| アセットパイプライン(Prefab、Material、Addressables、GUID) | references/unity-assets.md | Bundle/spawn fn、StandardMaterial、AssetServer + Handle<T> |
| シーン → glTF 抽出 | references/unity-scenes-gltf.md | bevy_gltf、WorldAssetRoot、glTFast / Blender ブリッジ |
| Animator / Mecanim | references/unity-animation.md | AnimationGraph、AnimationTransitions::play、#[derive(AnimationEvent)] |
| Input System | references/unity-input.md | ButtonInput、Axis、Touches、Gamepad* |
| UGUI / UI Toolkit | references/unity-ui.md | Node、BackgroundColor、BorderColor、Taffy/flex |
オーディオ(AudioSource、AudioListener、ミキサー) | references/unity-audio.md | AudioPlayer、SpatialListener、bevy_audio |
| ビルド / デプロイ(Build Settings、IL2CPP、WebGL) | references/unity-build.md | cargo build --target、Cargo.toml の features、WASM |
抽出スクリプト(すべて Python 標準ライブラリを使用。Unity のインストールは不要です):
| スクリプト | 機能 |
|---|---|
scripts/unity/scene_inventory.py | .unity YAML を解析し、GameObject とトランスフォーム、コンポーネントのインベントリを JSON で出力 |
scripts/unity/prefab_inspector.py | .prefab YAML を解析し、Prefab ごとのコンポーネントグラフを出力 |
scripts/unity/animation_extractor.py | .anim YAML を解析し、AnimatableKeyframeCurve::new([...]) 向けに整形したキーフレーム JSON を出力 |
scripts/unity/asset_audit.py | Assets/ を走査し、種類、サイズ、GUID、および(任意で)依存関係グラフごとのインベントリを出力 |
すべてのフラグを確認するには、各スクリプトで --help を実行してください。各スクリプトの docstring には、対応するリファレンスが記載されています。
一般的な移植の原則
移植元のエンジンに関係なく、共通して当てはまる点です。
- ECS への移行。 Bevy 以外のエンジンの多くは、シーングラフとスクリプトのモデルを主に採用しています(1 つのクラスが 1 つのノード上でデータと振る舞いを担います)。Bevy はデータ指向です。データは
Componentに、振る舞いは独立したfnのSystemに置きます。MonoBehaviour/Actor/Nodeを 1 つの Rust 構造体として再現しようとせず、分割してください。 - まず、最小限のプレイ可能な部分を移植してください。 1 つのシーンで 1 人のキャラクターが、1 つの入力と 1 つのアニメーションで動く状態を目指します。それがコンパイルされて実行できたら、あとは反復して進めます。「すべてを並行して移植する」のは避けてください。
- アセットパイプラインが最大のボトルネックです。 コードはアセットより速く移植できます。まずアセットの抽出を計画し、ゲームプレイコードを書き始める前に、glTF + KTX2 + オーディオ形式を生成するコンテンツパイプラインを用意してください。
- 固定タイムステップを前提に考えます。 多くのエンジンでは、可変タイムステップと固定タイムステップの選択が隠されています。Bevy では明示的に分けます。決定論的なシミュレーションは
FixedUpdateに、フレーム駆動のメインワールドのプレゼンテーションはUpdateに、レンダラーの処理はレンダースケジュールに置きます。Time<Fixed>を使って補間してください。各システムをどこに置くかは早めに決めてください。bevy-core-conceptsとbevy-animation/references/procedural-animation.mdを参照してください。 - 座標系の違いに注意します。 Unity は左手系の Y-up、Unreal は左手系の Z-up、Godot は右手系の Y-up、Bevy は右手系の Y-up(glTF と同じ)です。多くのエクスポーターが座標系を変換しますが、非対称で方向が分かるアセットを含むシーンをインポートし、鏡像になっていないことを確認して抜き取りチェックしてください。
スクリプトの方針
scripts/<engine>/ には、ソースエンジンのプロジェクトツリーからデータを抽出する、実行可能な単一ファイルの Python ヘルパーが含まれています。このコレクションでは、次の慣例に従っています。
- 可能な限り標準ライブラリのみを使用します。 Unity の YAML は
pyyamlではなくreで解析します。インストールがより簡単なためです。 - ソースエンジンは不要です。 Unity のスクリプトはすべて、テキスト形式の
.unity/.prefab/.anim/.metaファイルを直接読み取ります。ファイルがバイナリ形式のエンジン(Roblox の.rbxl、GMS2 の一部)については、代わりにリファレンスで手順を説明しています。 - 自動変換ではなく、インベントリ作成と抽出を行います。 これらのスクリプトは Bevy プロジェクトを生成しません。移植対象を把握できるよう、あなた(または後続のツール)に JSON を提供します。ゲームプロジェクト向けの
tree+file+statとして扱ってください。 - リファレンスに基づいています。 各スクリプトは、ファイル先頭の docstring で対応するリファレンスを示しています。
注意点
- 一度きりの移植はうまくいきません。 コードの規模ではなく、プロジェクトのコンテンツ量に応じた時間を確保してください。
- Prefab のセマンティクスはそのまま移行できません。 Unity の「Prefab + Variant + Nested Prefab」の継承に直接対応する Bevy の機能はありません。ビジュアル用 Prefab は glTF にベイクし、データ用 Prefab はスポーン関数を記述してください。
- アニメーションのリターゲティングはエンジン固有です。 特に Mecanim の Humanoid リターゲティングには、標準で使える Bevy の同等機能がありません。
references/unity-animation.mdを参照してください。 - 座標系の反転は、エラーが表面化せずに失敗することがあります。 ほとんどのエクスポーターが処理しますが、必ず抜き取り確認してください。
- エディタースクリプトは対象外です。 Unity の
[CustomEditor]、Unreal Blueprints のエディターツール、Godot のツールスクリプトは、いずれも移行できません。Bevy のエディター環境は現在も変化しています。移植時はランタイムのみを対象にしてください。 - エンジン内部の ID を複製しないでください。 Unity GUID、Unreal FNames、Godot RIDs、Roblox InstanceIDs は、抽出時にのみ役立つサイドカーメタデータです。Bevy ではパスベースのハンドルと ECS エンティティ ID を使用します。
- 物理演算インテグレーションは Bevy 0.19 に固定してください。 現在互換性のある系列は
bevy_rapier2d/bevy_rapier3d 0.36とavian2d/avian3d 0.7です。 物理演算はレンダリングとは別です。ヘッドレス機能またはデバッグレンダリング機能を選ぶ前に、bevy-renderingを参照してください。
関連項目
bevy— ルーターです。Bevy 0.19 に固定し、すべての関連スキルを一覧表示します。bevy-animation—AnimationGraph、AnimationTransitions、#[derive(AnimationEvent)]。unity-animation.mdから相互リンクされています。bevy-ui—Node+ Taffy/flex モデルです。unity-ui.mdから相互リンクされています。bevy-cargo-features— Unity の Build Settings/PlayerSettings に代わるものです。bevy-wasm-webgpu— Unity WebGL から wasm32/WebGPU への移植方法です。bevy-cameras—RenderTargetコンポーネントとカメラモードです。Unity の Camera コンポーネントに近い機能です。bevy-rendering— レンダラーの選択と、物理演算とレンダリングの境界について説明します。bevy-physics— Rapier のボディ、コライダー、コントローラー、 クエリー、固定ステップのインテグレーションについて説明します。bevy-migration-0-17-to-0-18— 0.18 より前のリリースに固定されたチュートリアルを見つけた場合に役立ちます。
コメント
Markdown 対応