アーカイブ | 08:13

ゲームとC#

6 12月

かしらかしら?ご存じかしら?ゲーム開発でもC#を使えることをご存じかしら?

 

ということで、今日の話題はUnityPlay Station Suitを中心とした、ゲームに関する話です♪

Unity

まずはUnity。スマホ向けのゲーム開発でよく使われる、クロス プラットフォームな3Dゲーム エンジンです。

日本でスマホ市場が伸びてる時期に丁度良く勢いに乗って、一気に有名になりました。今年の夏には、GREEが開発パートナー向けに無償ライセンス提供したという話題もあります。

C#で開発

付属の3Dシーン エディターを使ってゲームを作ります。シーン情報自体は独自のバイナリ形式ですが、ロジック部分はJavaScriptもしくはC#で記述できます。また、アドインを作ってエディターを拡張できますが、これもJavaScriptもしくはC#で記述します。

ちなみに、この手のフレームワークでは、ロジックよりも描画部分がネックになることが多いので、言語的な性能差はあまり関係ないと言われています。ただし、もちろん、重たい計算をする場合には、静的型付けや値型の概念を持つC#の方が有利です。

mono

Unityは、mono(オープン ソースでクロス プラットフォームな.NET移植)を使って作られています。C#はもちろん、JavaScriptもmono上で動いているそうです。

PlayStation Suite

そしてPlayStation Suite。こちらはまだSDK公開前で、概要発表しかない状態ですが、開発言語にC#を採用したということで話題になりました。

C#というとマイクロソフト(だけ)のものというイメージで、PlayStation SuiteでのC#採用を意外に思う人が多いみたいですねぇ。

日本の状況だけ見ると、ゲームでC#というのは意外かもしれませんが、世界的に見るとそうでもないんです。

XNA

アメリカだと、Xbox 360も順調に売れているというか、一時期は独り勝ちな状況もあったくらい(今だと、ソニー、任天堂ととんとんくらい)だそうで。Kinectを発売して以来、また好調なようですね。日本だと、Kinect単体での販売が多いみたいですが…(ひょっとして本体よりも出荷数多かったりして)

Xbox 360には、C#(XNAフレームワーク)を使ってインディーズ ゲームを作って販売できる仕組みもあります。一応、日本でもサービスはありますが、Xbox 360自体の普及率が低すぎて、なかなかビジネスにはできないのが現状です。しかし、アメリカでは、普通に小遣い稼ぎが成り立つ程度には市場があります。

PlayStation SuiteでのC#採用も、この実績があったからというのはあると思います。

脱C++

ゲームのようにハードウェア性能を限界まで引き出すことを求められるものでは、まだまだC++が現役です。そんなゲーム業界ですら、そろそろC++での開発がきついといわれるようになってきました。「2倍の性能を得るために、10倍の開発コストを掛けるのがよいのか」ということです(それでも、「2倍」を取りたい業界ではあります)。

今まで、任天堂のハードウェアもソニーのハードウェアも、C++しか選択肢がありませんでした。そこに大きな変化を生んだのはスマホです。iOSはObjective-C、AndroidはJavaでの開発。そして、前述のUnityなどを使えば、JavaScriptやC#での開発も可能です。

この流れに伴って、ゲーム業界でも脱C++の動きが加速しそうです。

—–

† あるいは、実行エンジンがC++のソースコードで提供されているスクリプト言語ならば利用できます。他の業界ではまず聞かない、LuaやSquirrelなどの言語が、この業界でだけ流行ったのには、そういう背景があります。

Windowsサーバー

クライアント側がC++なら、サーバー側はどうか。日本にいると、よく言われるんですよねぇ、「C#は見たことがない」と。

日本のウェブ業界、ソーシャル業界は、極端にLAMPシェアが高いです。Windowsサーバーは、パーセンテージでいうと1ケタじゃない?とか思ったり思わなかったり。しかし、世界的にみると、これ、日本だけの傾向なんですよね。なぜか。

特に、韓国や中国のウェブ サイトやオンライン ゲームはかなりに率でWindowsサーバーです。もちろん、MS SQL Serverと、ASP.NET(C#)の利用が多くなります。しかも、韓国・中国はオンライン ゲーム市場が非常に大きいです(一説には、違法コピーが多すぎてパッケージが売れないから必然的にオンラインに移行したといわれています)。

結果として、この辺りの国にオフショア開発を依頼することも多いですが、その場合、Windowsサーバーになりがちです。

Javaではダメなのか

脱C++の先としてはJavaじゃないの?とか思ったりするかもしれません。特に、PlayStation SuiteはAndroidベースで、そのAndroidはJavaでの開発がメインですし。しかし、Javaだといくつか怪しい点があるんですよねぇ。

Oracle

AndroidのDalvikがらみの訴訟まで意外と知られてなかったようですが、Javaプラットフォームの利用にはライセンス料がかかります(OSメーカーが払うものであって、エンド ユーザーにとっては無料ですが)。

そして今、Javaのライセンスを持っているのはOracleです。ええ、Oracle。まさか、SUN買収後に即Googleを訴えることまでするとは思いませんでしたが…

一方で、C#(.NET)は、マイクロソフトが「C#とCLIの仕様を誰がどの様な言語や方法で実装した場合でも特許侵害で訴訟しない」という声明(Community Promise)を出しています。

組み込み

Javaはそのライセンス料の絡みもあって、Javaプラットフォーム(仮想マシンとか基本ライブラリ含めて)の自前実装を持っているのは、大手SIerばかりだったり。当然、ゲーム用エンジンとか、「何かに組み込む」という感じではありません。

だからmonoなんです。オープン ソースな.NET移植。組み込み用途にはもってこいです。Javaか.NETかを問わず、仮想マシン レベルで何かに組み込むとなると、mono一択でしょうねぇ。PlayStation Suiteも、公式発表はありませんが、mono以外の選択肢があるとも思えないです。

ちなみに、「本家.NET/本家C#との互換性は大丈夫?」と思うかもしれませんが、monoは結構優秀ですね。C#は、ちゃんとC# 5.0のawait演算子も含めて、全部対応しています。標準ライブラリの方も、GUIなどのプラットフォーム依存の強い部分を除けば、結構ちゃんと移植されています。

性能問題

そして、Javaには少々、性能的な問題があります。

もちろん、.NETよりも歴史が長く、多くの部分は十分にこなれています。ガベージ コレクションの性能や、スレッドの性能などは非常に優秀だと聞きます。

しかし、問題なのは、値型と、仮想マシン レベルでのジェネリック対応がない点です。この2つは、仕様上の問題なので、技術がこなれてくれば解決するというものではありません。この値型とジェネリックに関しては、明日また改めてお話しましょう。

広告