Lumberyardのtwitch連携機能を使ってクソゲーを作ってみた

タイトルの通りです。
Lumberyard使ってクソゲー作ってみました。
クソゲー作ってみて思ったこと、実装方法等をご紹介します。

## Lumberyardって何？
- Amazonが提供しているCryEngineベースで作られたゲームエンジンです。（https://aws.amazon.com/jp/lumberyard/）
- CryEngine + twitch連携機能 + Gamelift(Photon的なやつ)連携。
- 開発環境は、windowsのみ。
- PC、PS4、Xbox One、iOS対応
- VR発表されました！ver1.3.0
- 無料です。

## twitchって何？
- 個人でネット番組等を配信できるサービスです。
- 最近のゲーム大会の中継等でよく使われています。
- ニコ生、Ustreamっぽいもの。

## 作ったもの

今回は、Lumberyardのtwitch連携機能を使ってクソゲーを作ってみました。
FPSベースで、twitchチャットで「kill him」と打つと敵AIが出現。
twitchチャットで「help him」と打つと味方AIが出現。

↓こんな感じ
下記の様に文字を打つと
<img width="1224" alt="スクリーンショット 2016-06-12 20.23.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/74698/750bd726-6ed5-af6f-5ce5-bce4bfd7f89b.png">

↓こんな感じになる。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/74698/149370fd-0536-fc8f-0291-001294c81bc1.png)


## 使ったもの
- windows10
- Lumberyard 1.2.0beta
- CryEngine GameSDK(https://aws.amazon.com/jp/lumberyard/downloads/)
- twitchアカウントが必要。（無料で簡単に取得できます）


## まず、AIを配置してみる
右のRollupBarからEntityを選択。
AI->Characters->humanを画面内にdrag

![1.png](https://qiita-image-store.s3.amazonaws.com/0/74698/3e021052-bafb-ed7f-0d3c-80e2768e585f.png)

次にコピペしてAIをこんな感じで配置してみます。
FactionをGrantsからPlayersに変更します。
Grantsは敵。Playersは味方みたいな感じです。
設定終わったら画面下部のAI/Physicsを押してみましょう。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/74698/b9bd423f-43fc-0192-66d6-939f06783f5e.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/74698/d07cdcf8-a691-a639-d5e6-b74b43b5cc75.png)

これだけだとその場から動かず、打ち合うだけです。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/74698/b9439da7-01ac-72e4-e29f-32b070db07af.png)

## AIもっと仕事して！

AIをとりあえずそれっぽく動かしてみる。
ObjectsのAI->NavigationAreaでエリアを指定します。
AIの行動範囲の設定になります。

![ob.png](https://qiita-image-store.s3.amazonaws.com/0/74698/0f180e83-7bf8-ec02-f80b-8dc06b265861.png)

こんな感じ
画面上部のボタンを押すといい感じに設置出来ます。
クリックすると点と点を結ぶ様な形で範囲の軸を増やせます。
最後はダブルクリック。
設置終わったら、キャラクターがその範囲内に収まるように少しz軸を弄ってやるといいと思います。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/74698/ec3cc430-3a71-2662-ec1e-f28a2a33337e.png)


いい感じにやりあってる・・・。
![unnamed.png](https://qiita-image-store.s3.amazonaws.com/0/74698/4109b95f-bc8f-faff-c078-e2d90487dbe6.png)

AIを意図した動きにしたい場合は、TagPointとかを使って見てください。
詳細はCryEngineのdocumentを読んでください。

## twitchとの連携！
twitchのアカウントを取得する必要があります。
https://www.twitch.tv/

twitch連携には、FlowGraphを使用します。
Lumberyardのパッケージ内にデフォルトで含まれているTwitchGamePlayのFlowGraphからそれっぽいものをExportして、自分のプロジェクトにimportしてください。
既にconnectとか、色々記述されてます。
今回のプロジェクトに合わせて変更しましょう。

[Enter Twitch Channel Name HERE]のInの部分に自分で作成したtwitchのチャンネル名を入力します。
Twitch:ChatPlay:KeywordのKeywordに入る文字に判定してその後の処理が行われます。
![flowgraph1.png](https://qiita-image-store.s3.amazonaws.com/0/74698/74ed13e2-5cd4-1405-38ad-2fcef97b2d63.png)

twitchのチャンネル名はここ。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/74698/799f86d2-cb27-95cb-2f24-c16d4be5bd71.png)

次にその言葉に反応して、特定のobjectを指定して、それを生成します。
この例では、String:SetStringのInに「Characters.Enemy.Easy_Pistol」、「Characters.Friendly.Easy_Pistol」を言葉に合わせて生成するようになっています。
GameSDKには、Easy_Pistol以外にも、Hard_Pistol、Hard_Rifleとかありますので、色々とカスタマイズしてみると面白いかもしれません。

下部のMathRandomでは、AIの生成の位置をランダムで指定しています。
AIの生成に成功すると「character created!」、失敗すると「failed」っぽい文字が出ます。
![flowgraph3.png](https://qiita-image-store.s3.amazonaws.com/0/74698/c4e74fae-7772-33fa-f148-bdd5cdd5a0fd.png)

あとは適当にObjectを設置して・・・・。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/74698/cb235b85-f157-baf2-6a60-6a3e033ef02f.png)

![fin.png](https://qiita-image-store.s3.amazonaws.com/0/74698/eea1f364-caf2-bdd9-9d0a-6d685ae686ea.png)

## 自分もプレイに参加してみた
結果こんな感じ。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/74698/d93264af-ed38-dfd7-92bb-9668297128bc.png)

## まとめ
今回は、配信者がtwitch配信している中で、視聴者がコメントを打つことで、敵が増えたり、味方が増えたりみたいなくそげーを作ってみました。
視聴者と配信者で一体感の出るゲームとか新しいなと思った次第です。
twitchで配信するには、別途配信ソフトが必要になります。PS4だとプラットフォーム上から配信可能です。
twitch連携は無料なので、皆さんも是非何か作ってみてください。