Bevy Engineメモ
最終更新日:2022年04月23日記事作成日:2022年04月23日
オープンソースのゲームエンジンBevyの特徴やTipsをメモしていく場所です。
更新履歴
(2022年4月23日)とりあえずページ下書き
Bevyとは
BevyはオープンソースのRust製ゲームエンジンです。元マイクロソフトのCarter Anderson氏が中心になって開発されています。
現時点ではUnityやUnreal Engineのようなエディタはなく、ゲームエンジンというよりはゲーム用ライブラリに近いです(検討はされているようです)。Rustやwgpuでゼロから作られていること、ECSベースなこと等が特徴です。
開発環境について
[dependencies]
bevy = { version = "0.7.0" }
Windowsでは現在ダイナミックリンクができないので、features = [“dynamic”]をはずしておきます。
IDEについて
Visual Studio Codeを使うのが簡単です。
調査:tasks.jsonとlaunch.jsonがよく分からないので調べる
$ rustup install stable
$ rustc --version
$ git checkout https://github.com/bevyengine/bevy.git
$ cargo run --example breakout
ブラウザ向けにビルドする方法
Unofficial Bevy Cheat Bookに説明があります。試した結果、最適化した最終的なwasmのサイズがだいたい2MB程度に収まるようです。
以下、手順のメモです。
Rustにターゲットアーキテクチャを追加します。
$ rustup target add wasm32-unknown-unknown
必要なcrateを追加します。
$ cargo install wasm-server-runner
$ cargo install cargo-make
$ cargo install wasm-bindgen-cli
$ cargo install basic-http-server
.cargo/config.tomlに以下を追加します。
[target.wasm32-unknown-unknown]
runner = "wasm-server-runner"
wasm32-unknown-unknownターゲットでビルドします。–releaseで最適化バイナリを出力します。
$ cargo build --target=wasm32-unknown-unknown --release
ウェブページから読み込み
wasm-bindgenでテンプレートを作成します。build.wasmの名前は適宜変更します。
$ wasm-bindgen --out-dir out --target web target/wasm32-unknown-unknown/release/build.wasm
ウェブページから以下の要領でロードします。build.jsの名前は適宜変更します。
<script type="module">
import init from "./build.js";
init();
</script>
調査:全画面表示する方法
WebAssemblyのサイズを小さくする
調査:wasm-pack
wasm-optを通して、さらにウェブサーバーで圧縮配信するためにbrotliで圧縮します。
$ wasm-opt input.wasm -o output.wasm -O --intrinsic-lowering -O
$ brotli output.wasm
その他のメモ
cargo buildすると1.5GBほどの中間ファイルが生成されます。Bevy本体ごとビルドしているので当然なのですが、エンジンの挙動を試すのはcargoのexamplesを活用すると容量の節約になりそうだと思いました。