2012年12月20日木曜日

ネットゲーム開発に風穴を空けるか?アセットストアNo.1作者のデザイン

Unityを使ったことある人ならばアセットストアのことはご存知のこととおもう。

知らない人のために説明すると、これは、ゲームの部品を売り買い出来るマーケットであり、3Dキャラクターのモデルから人工知能(AI)、開発エディタのアドオンまで幅広く追加部品を開発者が低価格で購入できる仕組みだ。

2012年度にアセットストアで売り上げがトップだったNGUIというソフトウェアの作者は1000ドル(約80万円)以上を1日で稼ぐ日もあるほどの稼ぎ頭で、今年にはUnity Technologies本社にも採用されたのだが、ネットゲームのためのフレームワーク開発をひそかに進めていて、まもなくリリースすることをNGUIフォーラムの掲示板で発表したというので驚きだ。


NGUIというソフトが有名だったのは、使い勝手の良さだけでなく芸術的ともいえるコーディング技量の高さが挙げられる。

いったいどんな設計を進めてきているのだろうか?

NGUI公式フォーラムで公開された内容を翻訳する:

-----------
http://www.tasharen.com/forum/index.php?topic=2513.0
on: December 10, 2012, 05:16:55 PM

ちょうど1年前にゲームを作成するときにユーザインタフェースを開発して、アセットストアに半ば思いつきでリリースした。これがNGUIの始まり。かなりヒットした。皆が気に入ってくれたのはシンプルさ、デザイン、コメントをふんだんに入れてエレガントに書かれたコードだと自負している。

NGUIのヒットによって、ゲーム開発が止まったものの我慢強く続けて、6ヶ月後にはゲームにマルチプレイヤー機能を追加した。すでにあるソリューションのトップ3を試したのだけど、究極的にはどれにも満足できなかった。結局は時間の制約もあって、そのうちの1つを選択した。でも強い想いとして自分でコードを書いてみたいなという気持ちがずっとあった。NGUIから学んだ全てを詰め込んで、シンプルで、強力で、柔軟で、十分に練り込まれたオープンソースを作りたい、と。

ついぞ数週間前に、まさにそれを始めることにした。新しいプロジェクトの名前はTasharen Networking Framework、略して「TNet」だ。このプロジェクトはもうじきリリースできる準備が整った。

で、どんな機能があるかっていうと:
  • オープンソースである:完全にC#で書かれていて修正したい場合は自身のニーズに合わせられる
  • 可読性が高い:コードは他人のために書かれている:綺麗、かつ存分にコメント入れされている
  • 柔軟性が高い:サーバはスタンドアローン、あるいはUnityの中で別スレッドにできる
  • 順応性が高い:「ホスト」が切断されたら?次のホストを選択すればよく、ゲームは強制終了されない。もし全員が切断されたとしても、それでも状態の保存が出来る。
  • 持続性が高い:リモート ファンクション コールを後続に接続するプレイヤーのために保存が出来るだけでなく、ある時点のサーバー全体の状態を保存して再開ができる。もし再度スタートさせると、あたかもシャットダウンしていないかのごとく再開が出来る。(ある意味でどのプレイヤーもオートセーブ)
  • 強力である:高性能なソケット機能(I/O完了ポート)を存分に活かす
  • 拡張性が高い:サーバの各チャネルは独自のルール(および保存データ)を持った別のエリアとなり、帯域幅に合わせて好きなだけ同時にゲームのホスティングが可能
  • プライバシー遵守:一人で遊ぶ場合、パスワード保護するかビシッとロックする。そのときもチャットを受け取ることは当然できる。
  • 一貫性がある:あちらこちらに if ステートメントを入れる必要がない。マルチプレイヤーで使えるコードはそのままシングルプレイヤーでも使用できる。コールバックの順序は保たれる。例えば、プレイヤーは「切断」の前に「チャネルを退出」通知を受け取ることができる。
  • 効率的である:頻繁にリモート ファンクション コールを最適化して、関数名の代わりにバイトIDを指定できる。通信量を節約する。
  • 分かりやすい:リモート ファンクション コール文法とパラメータの数を自ら調整できる。配列?余裕っす。バイナリ?当たり前っしょ。パラメータが100個?えっと出来るよ(やりたいならね)。
  • エレガントである:同じLAN上のプレイヤーにサーバー接続してもらわなくても、メッセージをブロードキャストを受け取ることが出来る。ローカルサーバのアナウンスに理想的かな。
  • 便利である:サーバにダイレクトにファイル保存できて、あとでロードすることが可能。プレイヤーはアバターのサムネイル画像や、持ち物データ、あるいはゲームマップ全体を他人にロードしてもらうことが出来る。

もっと機能はあるんだけど・・・もう十分に語ったかな。基本的な使用方法の説明に移るとするかな:

質問:ゲームの開始、終了の関数は?
TNServerInstance.Start(port, [fileToLoad]);
TNServerInstance.Stop([fileToSave]]);

質問:接続、切断の関数は?
TNManager.Connect(address);
TNManager.Disconnect();

質問:チャネルへの入室と退出の関数は?
TNManager.JoinChannel(id, levelToLoad);
TNManager.LeaveChannel();

質問:新規オブジェクトの作成と破棄の関数は?
TNManager.Create(gameObject, position, rotation);
TNManager.Destroy(gameObject);

質問:リモート ファンクション コールの送信方法は?
TNObject tno = GetComponent<TNObject>(); // TNBehaviourから継承した場合はこの行スキップ
tno.Send("FunctionName", target, <parameters>);

質問:ビルトインの通知はどういうものがある?
OnNetworkConnect (success, error);
OnNetworkDisconnect()
OnNetworkJoinChannel (success, error)
OnNetworkLeaveChannel()
OnNetworkPlayerJoin (player)
OnNetworkPlayerLeave (player)
OnNetworkPlayerRenamed (player, previousName)
OnNetworkError (error)

質問:サンプルは?
Windows
Mac OS X
Android

----------
最後の質問のリンクからダウンロードできるサンプルは見ごたえがある。Unity Advent Calendar 2012のQiita記事として取り上げたので、実際の動きを見てみたい方はそちらを見るとよいとおもう。

ネットゲーム開発に風穴を空けるか?アセットストアNo.1作者が新たなチャレンジ
http://qiita.com/items/4572392ad417f81d7bda

Unityに詳しい方はこの領域にはPhotonやuLinkを使ったことがあるかもしれないが、掲示板で作者からベータ版を懇願して入手した人のコメントをみるかぎり、それよりも強力だとの声がすでに挙がっている。

作者は今週の日曜日(12/23)ぐらいに$45のアセットとしてリリースしたいと掲示板で語っている。前作のNGUIでは機能限定の無料バージョンもリリースしているので実際のプライシングがどうなるかはこれから注視するしかない。

大げさかもしれないが、来年のアセットストアNo.1をこのソフトで狙っているのかもしれない。個人的にはその勢いでポイント、課金、やガチャ機能までつけたら最強なのだが。


関連記事

大手ゲーム会社から独立の苦悩を語る(前半)
http://gamesonytablet.blogspot.com/2012/10/blog-post.html

大手ゲーム会社から独立の苦悩を語る(後半)

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿

ブログ アーカイブ