SpatialOSを使えばMMOゲームを作れそうな

インターネットをご覧の皆さん こんばんは。
SpatialOS([https://improbable.io/games](https://improbable.io/games))を触ってみたところ、なかなか面白かったのでメモがてら記事を書いてみます。

# SpatialOSとは？
Improbable社([https://improbable.io](https://improbable.io))が開発している、
**MMOゲームの開発＆実行プラットフォーム**です。

MMOゲームに求められる要件をシンプルに表現するなら、

- 多人数のプレーヤで**同一空間を共有**する
- 空間内のオブジェクトの状態を**全ユーザで同期**させる

といったところでしょうか。
SpatialOSはこの空間共有＆状態同期を行う仕組みを提供します。

今年はGoogle Cloud NextやGDCでもセッションを行っていたので、目にされた方もいるのではないでしょうか。
[Google Cloud Next '17 | Herman Narula Day 3 Keynote](https://www.youtube.com/watch?v=fTuijWHwAsk)
[Improbable @ GDC '17 | a look inside SpatialOS](https://www.youtube.com/watch?v=9lZNGU8bwGc)

~~SpatialOSは現在オープンβを行っており、MMOゲームを開発するためのSDKの提供や、開発したゲームをホストするサービスが試せます。~~
https://improbable.io/games
※追記:"[SpatialOS GDK for Unity](https://gdk.improbable.io/spatialos-gdk-unity)" としてローンチされたようです。

# SpatialOSでできること
MMOゲームを作るのは難しそうで、まずもって作ろうという発想すらわかなかったのですが、SpatialOSを試してみてとても可能性を感じました。
面白いなと思った点を3つほど紹介してみます。

## Unityでサーバサイドの実装も行える
> MMOゲームだとサーバサイドを作るのに別言語とか勉強しなきゃいけないんでしょ。はい、ムリー。

ゲームを作る際にUnityを使っている方も多いと思いますが、
SpatialOSでは**Unityでサーバサイドの実装もできます**。
C#で書けるというだけではなくUnityの機能も使えるようです。
チュートリアルで扱うプロジェクトもUnityなので、わかりやすかったです。

A tour of SpatialOS
https://docs.improbable.io/reference/11.0/getting-started/tour

ちなみに、他にもUnrealで作れたり、C++/C#/Java/JavascriptのSDKもあるようです。

※追記: [UnityでMMOゲームを作成する際にやること](http://qiita.com/tsukitsutsuki/items/186e1c7aac2da5d7522f)を簡単にまとめてみました。

## サーバの負荷分散を行う仕組みがある
> 数人規模の接続数なら何とかなりそうだけど、何十人何百人と同時接続数が増えたらさばけるわけないじゃん。はい、ムリー。

SpatialOSには**サーバの負荷分散を行う仕組みが備わっている**ので、ある程度なら何とかなりそうです。
複数のWorkerで空間分割を行い、処理を分担する仕組みのようです。

cross worker boundaries
https://docs.improbable.io/reference/11.0/getting-started/tour#optional-cross-worker-boundaries

※追記:ちょっと古いですが、負荷分散の様子がわかる動画がありました。
Dynamic worker allocation time lapse on SpatialOS
https://www.youtube.com/watch?v=impXy5r4a3U
SpatialOS | Distributed physics without server boundaries
https://www.youtube.com/watch?v=ysB6bi7QUbw

## Web上からゲームの状態を監視できる
> もし作れたとしても運用するには、ゲーム内で何が起きているか把握できなきゃいけないでしょ。はい、ムリー。

WebのConsole画面が用意されていて、**Web上からゲームの状態を監視できる**ので便利そうだなと思いました。

プレーヤや各種オブジェクトの状態を見れる Inspector
https://docs.improbable.io/reference/11.0/getting-started/tour#the-inspector-window
サーバの状態を見れる Metrics
https://docs.improbable.io/reference/11.0/getting-started/tour#metrics
発生した各種イベントを見れる Log
https://docs.improbable.io/reference/11.0/getting-started/tour#logs

# おわりに
~~基本的にはドキュメントが充実しているので、
概要を知りたければ [A tour of SpatialOS](https://docs.improbable.io/reference/11.0/getting-started/tour) を、
具体的な実装方法を知りたい場合は [Pirates tutorial](https://docs.improbable.io/reference/11.0/tutorials/pirates/overview) を
やってみると良いかと思います。~~

~~注意点として、まだβの段階なので最新版のSDKでないと動かない場合があります。（最初10.3を使おうとしてインストールできなかった。）
SDKやドキュメントは最新版を参照することをおすすめします。~~
~~※追記: [SDKのインストール方法](http://qiita.com/tsukitsutsuki/items/b7eec02118e1e450c7a9)を簡単にまとめてみました。~~

※追記:"[SpatialOS GDK for Unity](https://gdk.improbable.io/spatialos-gdk-unity)" としてローンチされたようです。
概要を知りたければ [Get started](https://docs.improbable.io/unity/alpha/content/get-started/get-started) を、
具体的な実装方法を知りたい場合は [Health pick-up tutorial](https://docs.improbable.io/unity/alpha/projects/fps/tutorial) を
やってみると良いかと思います。
[GDKのインストール方法](https://qiita.com/tsukitsutsuki/items/1d9950256fd9c6ff66bf)も簡単にまとめてみました。
追記終わり。

SpatialOSの今後に関しては未知数な部分も多いですし、実際にMMOゲームを作るとなれば問題も出てくるかと思います。
ただ、もしMMOゲーム開発の敷居が下がるなら、いままで見たことのないゲームが出てきそうでワクワクしますね。

以上 おつきあいいただきありがとうございました。