2020-09-13

[98] Bevy (game engine) 導入編

Bevy ゲームエンジン

当記事の対象者

  元々技術系のサイトと言うわけではないのですが、今回はRust製ゲームエンジン「Bevy」の導入編として「Hello World!」レベルの基本的な部分に触れてみようと思います。前提としてRustのインストールと実行環境の準備が必要になります。できれば初心者レベルのRustの知識が欲しいところですが、Bevy自体がRustを使って書くものであり、今回触れるのは入門部分だけですので、全く知識がなくても何とかなるレベルだと思います。

最初のHello World!

  Rustインストール後、開発用のフォルダを作りたい場所でコンソール(PowerShellなど/Visual Studio Codeなどのエディタからでも可能)から

$ cargo new games

  と入力します($は入力行であることを意味します/$自体を入力する必要はありません/以下同様)。するとそのフォルダに「games」フォルダが作成されます。

$ cd games

  と入力し、そのフォルダに移動します。そのフォルダにある「Cargo.toml」をエディタなどで開きます。これには今作った「games」プロジェクトの基本データが書かれています。一番下に

[dependencies]

とあるはずなので、その下行に

$ bevy = { git = "https://github.com/bevyengine/bevy" }

と記載します。配布元であるcrates.ioでは(執筆時)

bevy = "0.1.3"

とありますが、これは公開用の最新バージョンです。Bevyは現在も活発に開発が行われており、このバージョン(0.1.3)以降の修正は適用されていません。まだまだ不安定であるが故、開発最新版を手に入れるため、上記のように直接URLを指定します。バージョン1.0.0である程度安定するまでは、開発進行を最新版で追うために、アーリアではしばらくはURL(開発)版を使っていこうかと思っています。

  現在Bevyでは主にRustのnightly版を使用しています。nightly版とはRustの最新開発バージョンで、通常のstable版と比べ、最新の(そして不安定な)機能を使えるようになっています。いずれBevyもstable版で十分に使えるように仕上げてくるとは思いますが、現在は高速コンパイルなど、nightly版でしか使えない機能も使用するため、以下のようにしてnightly版を導入します。

$ rustup default nightly

  ちなみに現在の(games)プロジェクトのみでnightly版を使いたい場合は上行の代わりに

$ rustup override set nightly

  とします。nightly版がインストールされていない場合、適用前にダウンロードとインストールの作業が入るため、少々(数分程度?)時間がかかります。

  高速コンパイルを行うため、現在の(games)フォルダに新たに「.cargo」フォルダを作成し、その中に「config」ファイルを作成、config_fast_buldsにある内容をコピペします。
  全てのコードが必要なわけでなはく、Windows 10を使っているのであれば、

[target.x86_64-pc-windows-msvc]

  から下のコードだけで十分です。#の行はコメントなので削除してしまっても問題はありません。
  一番下の2行

[profile.dev]
debug = 1

  は、マクロなどを沢山使用していてコンパイル時間が遅い場合に特に効果があるようです。デバッグ情報が削減されることによる高速化のため、お好みで。

  以上で前準備は整いました。とりあえずは「Bevy」をコンパイルしてしまいましょう。

$ cargo run

  コンパイル時間は環境にもよりますが、5分ほどです。上手くいけばコンソール画面に「Hello Wolrd!」と表示されるはずです。ただしこれは通常のRustのコードであり、Bevyプログラムではありません。

BevyのHello World!

  ここではBevyアプリとして「Hello World!」を表示してみます。
  src/main.rsファイルを以下のように書き換えます。
  最も簡単なBevyアプリです。「cargo run」を実行すると同様に「Hello World!」が表示されます。
  これはfnで定義した「hello_world」関数を「.system()」でSystem型に変更し、それを「.add_startup_system()」に渡すことで、名前のとおり「startup system」に加えています。startup systemとは、アプリ起動直後、最初に一度だけ実行されるものです。最後の「.run()」でApp(Bevyアプリ)を実行しています。
  あまりにシンプル故にこれはECS(エンティティ・コンポーネント・システム)を説明するには情報不足なコードではあるのですが、これがBevyの「Hello World!」です。

現在の進展具合

  思っていたよりもBevy The Bookの内容は短く、逆に最初のNews記事(Introducing Bevy)は分量のあるものでした。現在はDiscordで活発に様々な機能ごとに議論が行われており、日々Bevyは進化している状態にあります。英語とRustに慣れている方なら「Bevyの公式サイト」全てに目を通すのにさほど時間はかからないように思います。逆にCrateの解説に細かい情報がないため、また、現在も恐らく大きな改変が度々起こっている故、ライトユーザーにとってはできることは少ないかも知れません。exampleAwesome Bevyなどで実際のコードを読みながら研究していけば、Bevyと同時にRustの勉強にもなりそうに思います。もちろん、技術のある方なら積極的に開発に関わっていくという選択肢もあるでしょう。
  将来的にはエディタを実装し、Godotのようなゲームエンジンに近づくものと予想されます。もちろんRustのみで開発していくゲームエンジンということで、Godotよりは高いプログラミング技術が要求されることには代わりはないでしょうが、「ゲームの開発効率」も重視しているそうなので、Rustが使えるゲーム開発志望者の方は、プロジェクト参加してみてはいかがでしょうか。