LumberyardのGem設定　初級編

かなり遅れましたが、[Lumberyard Advent Calendar 2017](https://qiita.com/advent-calendar/2017/lumberyard) 23日目の記事です。

LumberyardのGemを有効にしてみましょう。
今回、検証で使用したバージョンは1.12.0.1です・

#Gemとは？

Gemはゲームプロジェクトを拡張するためのコードやアセットが含まれているパッケージのことを言います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/b811e52c-2ad6-264d-bbe5-97ad1750a5ac.png)

超簡単に言えば、Lumberyardのプラグインみたいなものです。

LumberyardもGemにあるアセットを有効にすることによって、VR開発、Twitch、ScriptCanvas等の機能を使うことが可能です。

Gemを有効にするには、他のゲームエンジンと比べて少し手間がかかるので、[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lumberyard/latest/userguide/gems-system-gems.html)を見ながらちょっとまとめてみました。

## おまけ　自作のGemについて

Gemは開発者が新規に作成することも可能のようです。

今回は触れないので興味ある人は、[こちらのドキュメント](https://docs.aws.amazon.com/ja_jp/lumberyard/latest/userguide/gems-system-gems.html)の「プロジェクトコンフィギュレータ を使用して新しい gem を作成するには」「コマンドラインを使用して新しい Gem を作成するには」をお読みください。

#前提条件

デフォルトのエンジン設定ではGemがそもそも使えないため、Lumberyard セットアップアシスタント で [Compile the game code] オプションを選択しておく必要があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/8d47a096-1ffb-ba5f-b616-73f62cddce7f.png)

上から三番目のチェックを有効にします。
Gemを利用するにあたり、Insttall required SDKで必要なSDKをすべてインストールする必要があるので、セットアップアシスタントで一括でダウンロードしましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/efcd3682-b451-0db6-2ebc-6e8e09d5c85a.png)

#Gem有効手順

今回は既存で作成したプロジェクトに新規のGemを有効にします。

※プロジェクトの作り方はまめおさんの[Lumberyard 新規プロジェクト作成方法](http://papersloth.hatenablog.com/entry/Lumberyard201708)を見てください。

有効にするには、Lumberyard Project Configuratorから該当のプロジェクトのEnable Gemsをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/e690b60c-c8a8-bc6e-0396-0bb892c06ee9.png)

※今回検証用に作成したプロジェクトは「Test1」になります。

Gemを有効にする前に、あらかじめプロジェクトを右上にある「Set as default」で、デフォルト起動プロジェクトにしてください。

※これをやらないと後述の作業がすべてエラーが出力されるか、別プロジェクトにあるGem設定が反映されてしまいます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/0200184e-ea36-70c9-4d37-44b01a558079.png)
選択自体は、使いたい機能にチェックを入れて、右上のSaveを押すだけです。
非常に簡単です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/77344fe7-c8aa-10d2-1cd4-25197735a299.png)
※(REQUIRED)と赤文字で書かれているGemは**必須項目**なのでチェックを外さないでください。外してSaveしてしまうと最悪プロジェクトが壊れる可能性があります。

ただ、Gemを有効にしただけではプロジェクトにその機能が追加されません。
またGemによってはプロジェクト起動時にエラーが発生して開けなくなる場合があります。
そのため、プロジェクトを再ビルドする必要があります。

#プロジェクト再ビルド

早速プロジェクトを再ビルドしましょう。
ビルドするにはコマンドラインが必要です。Windowsでは一応コマンドプロンプトでも行けたので、そちらのやり方を書いていきます。

※もし、ビルド時に謎のエラーが起きる場合は[AWS コマンドラインインターフェイス](https://aws.amazon.com/jp/cli/)をインストールすれば解決するかもしれません。

## 1.コマンドラインでdev ディレクトリに移動

デフォルトの設定でインストールしたのであれば、以下の通りコマンドを入力してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/88449e11-6147-c798-f1d9-9d41ad8e7949.png)

「cd」と入力して、エンジンをインストールしたフォルダのdevをドラッグアンドドロップするだけです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/647eda36-81b1-8b06-a134-d0f1c6b90950.png)

移動完了です。

## 2.lmbr_waf configure実行

続いてlmbr_waf configureを実行します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/d8fa3f2d-6c7d-e004-f974-2d24aa08f739.png)

実行するとこのような感じでコマンドが走ります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/00d702c0-c826-32e5-c435-c632fc3d9d12.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/06082225-0a7c-bf10-94c9-6e5a55e63341.png)

最後、finished successfullyが出れば成功です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/951003f2-a901-3648-4308-8f56a74d145c.png)

※ここでエラーが起きる場合、プロジェクトが別の設定になっている（削除済みのプロジェクトを対象に実行している）可能性があります。

## 3.lmbr_waf build_win_x64_vs2015_profile -p game実行
最後、「lmbr_waf build_win_x64_vs2015_profile -p game」と入力して実行します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/fd53ba53-5a5f-4d1f-f4ae-4fa1e3ac4595.png)

※上記はVisual Studio 2015をインストールしている場合です。
※Visual Studio 2013をインストールしている場合は、「lmbr_waf build_win_x64_vs2013_profile -p game」と入力します。

このビルドが一番時間がかかるので、気長に待ちましょう。
何事もなく無事successfullyが出れば再ビルド完了です。

新規追加分のGemがプロジェクトに反映され使えるようになっています。

## 再ビルドのエラーについて

Lumberyardがベータ版であるせいか、いくつかのGemを有効にすると再ビルド時にエラーが出力されることがよくあります。

よくあるのが、以下の文字コードのエラーです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/104377/f2483486-5012-9219-89a3-990642cea43e.png)

上記の例ですと、AnimGraph.cppがUnicode形式以外になってるというエラーです。
該当のソースの文字コードをUnicodeに変換しましょう。

中には**文字コード以外が原因で**エラーを吐くGemもあります。
※元のソース(CryEngine4)の60%強を修正したとのことなので、その影響が出ている可能性は否定できません。

---

※追記

上記の文字コード以外のエラーは、すべてのGemを有効にした場合に発生してました。
そのためどのGemが原因なのか完全にわかっていないため、調査して問題のあるGemが分かり次第再掲させていただきます。

---

もし[フォーラム](https://gamedev.amazon.com/forums/index.html)をみて解決方法が書いていない場合は、自力で頑張ってエラー吐いているソースを修正するしかありません。
ベータ版であるためにちょっと不安定な部分もあります。

# まとめ

ちょっと手間はかかりますが、Gemを利用すれば様々な機能を使うことが可能です。
もし、ベータが外れた場合、この機能がほかのエンジンでいうAsset Store的な役割をする可能性は十分あると思います。

この手間をかけずに、簡単にGemの機能を反映されてほしいなという気持ちもあるので、今後のGemに期待しています。