2007年11月02日

takushimaThree Ringsフレームワークを使う(第1回)

こんにちは、多久島です。

今回は初回ですので簡単に研究の経緯を説明します。そのあとThree Ringsフレームワークの解説に入ります。

研究の経緯

はじめ、私たちはMMOゲームをどう作るのか知りたいと思いました。「いまさら?」と思われるかもしれませんが面白そうだったしビジネス上の必要性もありました。公開されている資料に目を通してエンタープライズシステムとの類似点や、LAN対戦用のシステムとは似ていても異なる点があることなどを知ります。うまく言えませんが「サービスとしてゲームを提供するためにたくさんのコンポーネントが必要になる」といった感じでしょうか。私たちはLAN対戦ができるゲームにかかわった経験しかなかったので、そこから類推して全容をつかもうとしました。しかしそれでは分からないことも多くあります。そこでやってみることになりました。それが研究活動の始まりでした。ポリシーは「簡単に、安く、運営までたどり着こう」です。

しばらくウェブをさまよっているとThree Rings社がMMOゲームのフレームワークを公開していることを知ります(Three Rings社とフレームワークについては注目技術コーナーもご覧ください)。目的によく合致していたので彼らのフレームワークを使わせてもらうことにしました。豪華なクライアントはそもそも(人的リソースの関係で)作れないのと、サーバ側に蓄積されたコードベースを持っていませんでしたからこれで十分でした。フレームワークを使わずに低層から積み上げていくこともときには必要ですが、今回は最後までたどり着くことが最優先です。

ところでフリーなネットワークライブラリというものは無数にあります。ほかを検討しなかったわけではありません。実際しばらくRakNetを使っていました。しかしコア機能はしっかりしていてもそれ以外はまだまだということもあります。ライブラリを作ることが目的ではありませんので、一通りそろっていそうで実績のあったThree Ringsフレームワークに目をつけたというわけです。研究用の予算にも限りがありますから商用製品は選べませんでした。もっともそのおかげでこうして記事をかけるんですけどね。

このような経緯を経てThree RingsフレームワークでMMOゲームを作っているのが今の私たちです。それではこのThree Ringsフレームワークの使い方をこれから3回にわたってまとめていきます。

Three Ringsフレームワーク概要

まず名前の話です。これまでThree Ringsフレームワークと書いてきましたが正式名称ではありません。Three Rings社のオープンソースソフトウェア群に名前はなさそうなので便宜上こう呼ぶことにしています。特徴は、

  • 元々はThree Rings社のプロジェクト、Game Gardens用に公開された。Game Gardensはアマチュアにマルチプレイヤーゲームの作成環境とホスティングサービスを提供するもの。
  • RPCと分散オブジェクトを中心に、トランザクション、シーン管理、サーバ間通信、認証、データベース、ロギングなどのAPIが用意されている。
  • 2D、3D両方の描画APIも限定的ながら存在している。3D表示のためにJava Monkey Engineを内部で利用する。そのほかクライアント向けにJava Web Start似の自動アップデートシステムがある。
  • ほとんどの部分がJavaのみで書かれている。プロジェクト構成もよくあるJavaプロジェクトといった雰囲気。例外はFlashのクライアントが作れるところ。ActionScript3で記述する。
  • 運営を続けながら改善されてきただけあって、細かいところまで行き届いた作りになっている。
  • 巨大だがソースコードの質は高い。しかしドキュメントは少ない。
  • LGPLを採用。

になります。フレームワーク然としているのは主にネットワーク部分ですが、ジャンルにべったりということはありません。例えばThree Ring社では本格的なMMORPGはまだ作られていませんが、その気になればきっと作れる…でしょう。また、描画系はほかに比べて再利用しづらいので、自分で用意してしまったほうが早いこともあります。

次にThree Ringsフレームワークを使うにあたり、パッケージの大まかな把握ができているとよいと思いますので、ここで説明します。主要なパッケージには、

  • narya: 低レベルのネットワークレイヤー。ゲーム専用というわけではなく汎用性がある。ほかに依存しているネットワークライブラリはなく、標準のJava NIOを利用する。
  • nenya: Swing、Java Monkey Engine、Flashを使った2D、3Dの描画ライブラリ。ただし2D表示は等角投影のタイルベース用がほとんど。
  • vilya: 高レベルのネットワークレイヤー。naryaとnenyaに依存している。サブパッケージのwhirledはポータルで接続されたシーンを扱うことができる。
  • toybox: Game Gardens向けのゲームに用意されたライブラリ。
  • samskivert: Java用のユーティリティライブラリ。O-Rマッパー、Servlet、Swing、Velocity、スレッド、コンテナに関連したソースが含まれる。
  • getdown: アプレットを通じてJavaベースのアプリケーションを配布するためのシステム。BitTorrentもサポートしているらしい。

があります。社名でお気づきかもしれませんが、パッケージ名のいくつかはロード・オブ・ザ・リングが出典のようです。この中で私たちはnenyaとvilyaのwhirledを主に使用しています。

Three Ringsフレームワーク開発情報

最後に開発情報の入手先を紹介しておきます。主要なウェブサイトはふたつです。

  • Three Rings社サイトのCodeページ: このページにはパッケージごとに紹介とリポジトリURLが記されている。
  • Game GardensのWiki: naryaを使うチュートリアルやサンプルコードを見ることができる。ほぼすべてのパッケージを含んだGame Gardens toolkitのリポジトリURLはこちらに記されている。

ビルド環境の構築については次回詳しく取り上げますが気の早い方へ。WindowsでGame GardensのWikiにそってコンパイルしようとすると`ant distall`コマンドが失敗してしまいます。ネイティブライブラリのコンパイルでしくじっているので、ビルドスクリプト中の該当箇所をコメントアウトすれば通ります。次までにパッチを用意しておきますね。

それでは、また。

Leave a Comment

Trackbacked

trackback url for this entry: http://www.pyramid-inc.net/lab/archives/13/trackback