ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

OSSのゲームエンジン「Playground」のハッカソンに行ってきたよ

11/2(土)、11/3(日)の2日間かけてKLabさんの開発したオープンソースゲームエンジン「Playground」のハッカソンがあったので行ってきました(会場もKLabさん会議室)。

PlaygroundはAndroid&iOS両方に対応したゲームエンジンです。ソースコードhttps://github.com/KLab/PlaygroundOSS で公開されていますがソースだけではいかんとも理解しにくいのでハッカソンで直接、どういうエンジンなのか聞いて手を動かしてきました。



Playgroundゲームエンジンとしては後発ながら2D,2.5Dのゲームに特化していて、既に音ゲーの「ラブライブ!」などで実績があります。そのため品質も(OSSのファーストリリースにしては)しっかりしてる印象でした(一般的な使い方での不具合は取れている)。またゲームを作ってて欲しいなぁ、と思う機能はたいてい搭載されていたあたり、こなれてる感がありました。ゲームエンジンが最適化進んでるので、結構ゲームの内部構造(テクスチャとかUIレイアウトとか)に関する知識があったほうが理解がしやすいと思います。


こちらがPlaygroundのアーキテクチャ図。ゲームエンジンと表記されている部分より下側をPlaygroundが担当してくれます。

「ゲーム本体」はLuaというプログラミング言語を使って書きますが、C、C++C#でも書くことができます(いくつかの言語をバインディングしてる)。わたしはチュートリアルなどが充実してたLuaを使いました。はじめてでしたが思ったより簡単な言語?(ただしArrayがないなど癖が強い。代わりにTableという連想配列のようななにかがある、あまり長時間触っていないので評価しにくい)。スクリプト言語でも高速な部類であること、移植性が高いことを目指した言語のようです。


- Wikipedia http://ja.wikipedia.org/wiki/Lua
- 産総研Luaの手引き http://staff.aist.go.jp/yutaka.ueno/lua/tebiki51jp.html


ハッカソンでは2つのチーム(Playgroundの内部構造を知るチームとゲームを作ってみるチーム)に分かれていろんな角度からPlaygroundを触ってみました。









内部構造の解析しているチームではC#のforeach文をPlaygroundにバインディングしていました。ガチ言語勢です。
https://github.com/KLab/PlaygroundOSS/pull/65


ゲーム作成チームに混ぜてもらい、普段触らないLuaや知らないフレームワークで大変頭を使った結果、以下のようなゲームができました(みんなでつくってます、あとあんまりコードかかずに素材作ったりしてました)。


ゲームの内容はさておき(多分)Playgroundが世の中にでて初めて深く触った被験者の1人となったので実際にゲームエンジンに触れてみた感想を書いておいたほうがいいだろうなぁ、と思うので、いろいろ書いてみます。


Q. 開発環境はどうしたらいいの?
A. 自分が試したい実機がiOSならMacAndroidならUbuntuが必要です。UIのレイアウトファイルがWindows環境でしか作れない、という膝に矢を受けてしまってな状態なので、Windowsをバーチャルボックスで動かせる環境があったほうがいいです。UIコンポーネントそのものをコードで書いてしまえば回避できるのだけど、テクスチャデータを生成したり、ボタン用データをつくったりなど細かいコンポーネント作成はやっぱりWindowsが必要です(XMLなので手でも作れますが、やはり厳しい)。さらにWindows環境ではエミュレータもあるので動作を確認するだけならWindowsが一番簡単です。どの環境でも開発できるpathがあるのは評価できます。ただそれぞれ単独では完全に動作せず、依存があるのはネックです。ハッカソンでは持ってるPCのOSで役割が決まる、というミラクル展開ですが役割分担がハッキリした(そしてそれぞれが固有の環境不具合でウッとなった)いい思い出です。


UIレイアウトの作成画面はこんなかんじです。指のアイコンがでてるなどデザイナさんにやさしい仕様(業務で便利だろうなぁ感ハンパない)。


Q. ゲームはどうやって作るの?
A. ゲームはLuaだけで完結して作れるようになっています。スクリプト言語ですが、実際に作ってみると思ったより高速に動作します。この部分は気を付けて作っているそうで描画処理なども事前に計算できるところは計算して(行列演算を先にやって演算結果をキャッシュして次に位置が変わっていなければ再利用するなど工夫して)いました。ゲームで使用する絵は1枚の大きなテクスチャに展開して読み込みを最適化するのですが、同じ仕組みも入っていました。使う画像ファイルはすべてテクスチャ単位(でっかい1枚の絵にペタペタ人物や背景、UIデータを張っていきます)


こんなかんじでアイコンやボタン、画像をペタペタ張ります。
(デザイナさんなど完全に分業しているのであればWindowsだけで作業は完結する、業務的ユースケースに合致してる)


またCやC++C#で開発したいひとはVisual Studioあたりを使うとよいでしょう。VisualStudio向けのビルド環境が整備されていました(デバッグビルドで試してください!リリースビルドは利用されていないようです)。


Q. AndroidiOSの実行ファイルはどうやって出力しているの?
A. Luaでつくったスクリプトファイル(もしくはC/C++,C#で書いたゲーム部分)をTobogganというツールに食わせます。こいつは実行環境にもなっていて、Windowsシミュレータとしても動作します。たいていの動きの確認はWindows上で完結しました。大変優秀です。が、まれに落ちます(不安定)。

こういう業務で使っていたツールにありがちなのですがハッカソン参加者のような初心者が何気なくボタンをぽちぽちすると、それはたいてい想定されていない動きなので勢い、動作が不安定になります。いさぎよく再起動です。


Q. ボタンやリストとかUIコンポーネント、サポートされている操作は何?
A. 一般的なUIコンポーネントはだいたいありそう(Luaしかみてない。Playground側のソースを読むとC/C++実装のUIコンポーネントも見えたのでCやC++で書くのは簡単なはず)。

 配布されているソースコードには一緒にチュートリアルも添付されていました。
 PlaygroundOSS/Tutorial/01.SimpleItem〜26.ScrollBar


また「ラブライブ!」のためか音声関係のAPIがやけに充実していました。あと機種依存は結構割り切りがあってiOSでは十分、Androidだと全部に適応したサイズをつくるのは難しそうです。


環境を作るには以下のスライドが役に立つと思います。

Macな人は ブライテクノさんの構築手順書をみてもいいかもしれません。
http://brightechno.com/blog/archives/150


開発環境の構築でひと手間かかります。上記のような手引き的なものがあってWindows環境の人をあつめていろいろ触る分には敷居は低いのでWindowsなひとがエミュレータ立ち上げるところまでいくのはおすすめできます。MacUbuntu勢が依存がいろいろあってヤバい気配です。ちゃんと調査するぞ、という意気込みでお願いします。


Playground、2D,2.5Dの描画性能やサウンドAPIの豊富さ、すでに動作実績がある中での品質担保など不安定さを差し引いても(つまり今触るなら自分がKLab以外の人で初めて触るぐらいの意気込みがないとすんない動かない、という意味)差し引いても、メリットがありそうな気配です。作ったゲームはキャラクターが湯水のように表示される、いわゆる連打してユニット生産する系の操作もできるのですが、100体程度ユニットを出してもコマ落ちらしいコマ落ちはありませんでした。このあたりはさすが。


いまは使うのにスキルを必要としますが、そういう意味でも最初の一歩をハッカソンで踏めたのは良かった。そして最初はしんどい、という人は安定する、もしくは先駆者が手順書をまとめてくれるのを待ったほうが…!あと同業他社のひとはせっかくOSSにしてくれてるのでマジメに調査をおすすめ。

結構技術的な知見がたくさんはいっていて、言語バインディングの機構なんかはそういう面白さがあって言語勢が集まったのかなぁ、と思いました。


※紹介にあたってWindowsを使ってる人は、Visual Studioとかもってなくてもすぐ試せるように、Playgroundのエンジン部分をバイナリビルド+チュートリアルで配布しようかなぁ、と思ったんですがリリースビルドが盛大にエラーしたので間に合いませんでした(そして朝4時です)。リリースビルドが通ったら紹介するかもしれません。


ああ、こんな長い記事を最後まで読んでいただきありがとうございます!
またハッカソン会場を提供してくださったKLabさんと自腹でご飯をだしてくれた偉いらしい人にもこの場を借りてお礼申し上げます。