質問: 現在、railsでWebサービスを運営しており、今度はゲームやプロダクト製品を作ってみたいと思っています。 調べてみたところ、ゲームやプロダクト製品を作るならC++かjavaが多いように感じました。 C++は難しそうなので、できればjavaを勉強しようかなと考えています。 javaではどのようなゲームやプロダクト製品を作ることができますか? また、もっと簡単に作れるようにパッケージ化された言語があれば教えて欲しいです。
回答: その質問の内容で、満足できる回答ができる人はたぶんいません。 世の中にはたくさんの言語があります。それぞれ特徴があり、適している領域が異なります。そして、世の中にはたくさんの種類のゲームや製品があります。同じようにそれぞれ特徴があり、どのような環境で、どのように動作するのかが全く異なります。 たとえば、ゲームの環境ひとつとっても、WindowsやMacと言ったパソコン上で動作する物から、PS4やXBox One、Wii Uといった卓上ゲーム専用機、PS VitaやNintedo 3DSといった携帯ゲーム専用機、iPhoneやAndroidといったスマホ、ゲームセンターにあるアーケード筐体といったハードも含めた専用機、Web上のみで動作するようなブラウザゲーム、などなど多種多様です。これらについて最も適する言語はそれぞれ異なりますし、全てに適している言語など存在しません。 さらに、ゲームの種類まで考えると本当に多種多様にあります。ゲームでは無くもっと広いプロダクト製品となると、何が一番いいのかなど語れるはずもありません。 つまり、**具体的にどのような物をどのような環境で動かしたいのかが決まらないと、最適な言語を選択することは不可能である**ということを覚えておいてください。 さて、Javaについてですが、Javaが動く環境は、Windows、Mac、Linux、Solaris、BSD、Android(これは少し特殊)のみです。iPhoneやPS4では動きません。では、Javaで何でも作れるかどうかですが、理論上、何でも作れます(これはほぼ全ての言語に対して言えます)。しかし、速度面や実装面で実用的かどうかは別の話です。 たとえば3Dで動く画面をJavaで扱えるかというと扱えます。しかし、JavaはFPSゲームのように非常にシビアに、そしてリアルタイムにスムーズに3Dの画像を動作させることができるかというと、厳しいと言わざるを得ません。凄く速いPCなら問題ないかも知れませんが、それではPCのスペックを選んでしまいます。よりリアルタイム性を重視するなら、C++などを使用した方が良いとなります。(これは、PCの話でAndroidだとまた別の事情があります。) また、Java 3Dを組みやすいのかどうかと言うのもあります。つまり、道具の問題です。ここ最近3Dと言えばUnityが流行っていますが、Unityが3Dのゲームを作るのに優れた道具であるからと言われています。では、JavaでUnityを使えるのかというと、直接使うことはできません。せっかくJavaを覚えても、3DならUnityが最適だということでUnityを使おうとしたときに、Javaは少しも役に立ちません。 なんだ、簡単な物はないのか?というとそうではありません。前半で述べたとおり、作りたい物が決まっていると、本当に簡単に作れるパッケージも存在します。例えば、オーソドックスなRPGゲームを作りたいのであれば、RPGツクールを使うのが、たぶん、もっとも簡単で、もっとも速いです。 まずは、何を作りたいのか、そして、どこで動かしたいのかを具体的に決めることから始めることをお勧めします。そこから、最適な言語やライブラリを選定し、作成していった方が良いでしょう。その方が目的も持てますし、学習もはかどると思います。