アメーバピグの裏側めも
一月に開催されたAmeba x ロクナナワークショップ One Day College アメーバピグ サーバ セッションで各セッションごとにイベントレポートという講演そのまんまビデオが見れるので勉強させていただいたのですがかなり面白かったので個人的にメモを
しかしアメーバさんがこんなにいろいろ話してくれるなんてめったにないので是非聞いてみると良いですね!しかも最近話題のピグの話となれば聞かざる負えません!
インターフェースセッション(浦野大輔さん講演)のメモしてたら疲れたので他のはないです><
アメーバピグの開発は
ActionScript3
Flex Builder 3 + Flash CS4
- クォータービュー
ピグはクォータービューというマップを三点透視法で描いた世界をもとに実装している
斜めのラインに沿うようにオブジェクトを配置し、それぞれのマスにWorldX, WorldY, WorldZ 軸を設定している。(以下WorldXはwxWorldYはwy...と表記)
オブジェクトの重なり順の計算はxyとxyを足した数の小さい順にソートして保持している
ソートを実行するのは、オブジェクトが新しく配置されたタイミング、または別の場所に移動したタイミングで、奥行き順にソートしている
ピグはかなり頻繁に動くのでソート処理のパフォーマンスを気にする必要があるが、配列を使ってソートするとコストがかなり掛かるため、LinkedListを利用している。(LinkedListの方が要素の追加・削除や入れ替えを高速に行える)
- マウスイベント
ピグはfpsを24に設定しているが、オブジェクトが多いとすぐに処理落ちしてフレームレートが下がってしまうので、マウスイベントのオブジェクトの判定は
実際のオブジェクトと同じ大きさの矩形の透明なオブジェクトを利用してイベント処理をしている。
- マップエディタ
ワールド場にオブジェクトを配置してマップをデザインしている。ピグは自分のエリアをリアルタイムに編集(模様替え)でき、管理ユーザでログインすると普通は編集できない共有エリアも編集することができるようになる
- 経路探索
ピグは迷路みたいなルートでも目的地をクリックするだけでキャラクターが最短経路で移動してくれる
ここではA*というアルゴリズムを使用していて、このアルゴリズムはすべての経路を計算するのではなくだいたいここが最短だろうという道から計算していくので高速に処理できる
- ピグのチーム開発について
メインモジュール(ヘッダーやフッター)
クォータービューモジュール(メインの部分)
ウィンドウモジュール(ウィンドウの中身)
これらのモジュールをそれぞれのデベロッパーが開発する
メリットとしては
機能単位でプロジェクトを進めれられる
必要なときに必要なファイルだけをロードできるので無駄がない
モジュールごと単体で動かせるようにDependency Injectionというデザインパターンを採用(クラス・フレーム間の依存関係をできるだけなくす)
自前でDIコンテナというフレームワークを実装した(AOContainerというオープンソースでも同じようなことができるらしい)
- 社内ツール
社内ツールはadobeのAIRで作ってる
アバターの着せかえアイテム確認ツール(アバターをドラッグアンドドロップするだけで前後左右からの動作を確認できる)
家具アイテムの確認ツール(ドラッグアンドドロップすると実際に配置された時の動作を確認できる)
モーションレコーダー(ピグはそれぞれのモーションを外部データで管理しており、それを読み込んでモーションを独自のバイナリデータで保存する)
モーションチェックツール(モーションレコーダーで生成されたバイナリファイルをロードするとその動きの全モーションを透過pngでキャプチャ保存できる)
売上レコード(どんなアイテムがどれだけ売れたかを表やグラフで管理する)
ピグをAIRで実装(ローカル環境で動くようになる 公開はしてない)
- 質疑応答
Q 企画からリリースまでどれくらいの期間でしたか?
A 企画立ち上がりが08年7月頃
デザインなどが決まったのが08年9月頃
実装を開始したのが08年8月くらい
リリースが09年2月の中旬
最初はflashエンジニア3〜4人、イラストレーターが2〜3人だった
Q モーションレコーダはどういう形で保存しているのか、またなぜバイナリ?
A アバターのムービークリップの構造を決めて、手や足の関節とかをflashでつけたマトリックス(移動や回転)のモーションをバイナリに書き込んでいる
実際に利用するときにモーションファイルのバイナリを読み込んで解析し、キャラの動きをつけている(バイナリの方が処理が早いし)
という感じだった、ビデオを見て行っとけばよかったと思った。東京遠いです。
また他のセッションも面白かったので全部見てみることをおすすめします!!