2dgames.jp

ゲーム開発に役立つ情報とゲームを公開しています

ゲーム開発環境のまとめ

■このページについて

「これからゲームを作ってみよう!」と考えている人のために、自分が使ったことあるゲーム開発環境を紹介してみます。

■更新履歴
  • 2012-12-02 Objective-C / PHP を追加
  • 2013-10-28 GameMaker:Studio を追加
  • 2014-04-27 おすすめの開発環境の項目を追加
  • 2014-06-20 Unity と HaxeFlixel を追加
  • 2014-06-30 言語一覧に分類を追加

■おすすめの開発環境

対象者 おすすめの開発環境
プログラムの知識がない人 HSP
C言語を勉強したことがある C/C++ + DXライブラリ
面倒でもモダンな言語で開発したい D言語 + DXライブラリ
スクリプト言語でゲームを作りたい Python + Pygame
スクリプト言語でゲームを作りたいけど実行速度も必要 C/C++ or D言語 + DXライブラリ + Lua
マルチプラットフォームのゲームを作りたい Unity
3Dのゲームが作りたい DXライブラリ or Unity
  • プログラムの知識がない人にHSPをすすめる理由:言語を理解するために勉強することが少なく、Webでの情報量が多いためです
  • DXライブラリをすすめる理由:Webでの情報量が多くサンプルコードが大量に存在します
  • D言語をすすめる理由:環境づくりに苦労しますが、すっきりした言語仕様のためストレスが少くコーディングできます
  • マルチプラットフォーム開発環境は断然Unityをおすすめします。個人的にはHaxeFlixelをおすすめしたいところですが、Unityと比べて情報量が少ないためおすすめできません。

■言語一覧

完全に主観ですが、それぞれの言語を使ってみた評価をまとめてみました。

言語 Webでの情報量 お手軽さ 拡張性 言語仕様 実行速度 デバッグ効率 配布ファイルサイズ 環境整備 分類 特記事項
HSP (ゲームを作るための)情報量が断然多い
C/C++(DirectX) 高速で動作する。何でもできる
C/C++(DXライブラリ) ゲームライブラリ 高速で動作する。MMDが使える
Python(Pygame) × ゲームライブラリ コーディングが楽
Ruby/SDL × コーディングが楽
D言語(SDL+OpenGL) × 高速で動作する。しかし情報量少なめ
Flash(Flex) × Web上で高速で動かすならやはりFlash
Objective-C(Cocos2D) ゲームエンジン iPhone(iOS)専用
PHP - ソーシャルゲーム作るならPHP
GMS(GameMaker:Studio) ゲームエンジン(ツール) マルチプラットフォームに出力可能。アクションゲーム特化ツール
C#(Unity) ゲームエンジン(ツール) 3D特化。マルチプラットフォームに出力可能
Haxe+OpenFL(HaxeFlixel) ゲームエンジン 2D専用。マルチプラットフォームに出力可能
分類について
  • 記入なし:単なるグラフィック処理やサウンド再生などを持つマルチメディアライブラリ
  • ゲームライブラリ:ゲームに特化した機能を提供するライブラリ
  • ゲームエンジン:ゲームオブジェクトやシーン管理機能を提供するもの
  • ゲームエンジン(ツール):ゲームエンジンに加えてGUIのエディタが付属するもの

■言語詳細

▼HSP

私が一番最初にゲームを作っていた環境です。プログラム言語(正確にはスクリプトですが)としては非常にシンプルで分かりやすいですし、特にWeb上にチュートリアルがたくさんあるのが魅力的です。例えば、「hsp ゲーム 作り方」でGoogle検索すると、かなりの情報が見つかります。何よりも、絵を出したり音を出したりするのが、数行で記述できるのが楽ちんです。

例えば、

 picload ”hoge.bmp”

こう記述するだけで、”hoge.bmp”をロードして表示することができます。

Windows APIやDirectXをやっていた人なら分かりますが、画像を表示するのはとても面倒なことです。例えば、Windows APIを使用してWindowの初期化をするだけでも100行を超えるプログラムを書く必要があります。ですがHSPなら画像を表示するために必要なコードはたった1行です。HSPがいかに簡単に書けるのかが分かります(なおDirectXを直接使用する場合は、面倒な手続きを減らすためにライブラリを作ることとなります)。

…ただ、言語仕様が貧弱でやや独特なのが欠点です。例えば、

  • 変数が全てグローバル(ローカル変数が書けない)
  • 構造体が書けない
  • 関数が書けない(マクロ的な記述となる)

というC言語などのプログラム言語をすでに習得している人からは、 「なんでこれができないの?」などと、とても不評です…。ですが裏を返せば、「余計な機能がないから分かりやすい」と言えますし、OMEGAさんの一部のゲームはHSPで作られていますし、

がHSP製ながら独創的で面白いゲームを作っています。結局はアイデア次第なんじゃないかと思います。

あと、HSP3Dishというのを使うことで、iOSやAndroidへの出力が可能となるようです。

▼C/C++とDirectX

私が次に手を出したのが、この環境です。正直、HSPの楽チンプログラミングに慣れていたため、DirectXの初期化処理とか独特のお作法に苦労した記憶があります。ただ、ライブラリを書くのはとても勉強になりますし、ゲーム会社(特にコンシューマー業界)に就職するならやるべきですね(実際専門学校に入るとDirectXでライブラリ作成の授業をするところが多いようです)。個人的にも、試行錯誤でライブラリを作った経験が、今の自分のライブラリの基礎となっているので、無駄にはなっていない気がします。

とは言え、今ならライブラリを一から書くよりも、「DXライブラリ」というDirectXを使いやすくしたものが公開されているので、それを使うと楽できます。

あとDXライブラリなら、MMDを簡単に読み込んで描画する仕組みが用意されているのもいいですね。

▼PythonとPygame / RubyとSDL

C言語でゲームを作ると、メモリ関連の問題にぶち当たることが多いです。主にメモリリークやメモリ破壊ですね。とくにメモリ破壊はハングアップの原因となり、調査に多くの時間が取られることとなります。そういった問題が嫌になって「スクリプト言語でゲーム作ればクール」と思い、PythonやRubyに手を出したりしました。

実際、メモリ破壊の心配がほとんどなく、記述もすっきり書けるのでとても作りやすかったですけど、配布するときにランタイムを付属する必要がありファイルサイズが大きくなるのと、実行速度がやや遅いのが気になり、後述するD言語に環境を移行しました。

ただ、現在もツール作成(データコンバートなど)やプロトタイピングではPythonやRubyを使うことも多く、補助ツールとしてスクリプト言語を覚えておくのは悪くないと思います。

ちなみにPygameは現在開発が停滞しているような印象です。もしもPythonを使うのであれば、今ならKivyというクロスプラットフォーム開発環境が良さそうです。( http://kivy.org/ )

▼Java

昔、携帯電話(iモード)のゲームを作る仕事をしていたこともありました。JavaにはEclipseという開発環境があったのでとても開発がしやすかった記憶があります。

携帯電話のゲーム作成ですが機種依存の不具合が多く、色々と面倒な事をする必要があった記憶があります。

最近のJavaの使い道としては、Androidの開発環境ですね。

▼D言語+SDL/OpenGL

D言語は一般的にはあまり知られていないですが、メリットとしては、

  • コンパイル爆速
  • GC搭載
  • モダンな書き方ができる

デメリットとしては、

  • VisualStudioやEclipseみたいな開発環境が整備されていない
  • Webの情報がやや少なめ
  • コンパイラにバグがある、、、らしい(個人的にはあまり気になったことはないですが)

という感じです。 特にWeb上に情報があまりないのが少し大変でした。(今はそれほどでもないかもしれません)

あとVisualStudioみたいなデバッガがないので、RPGのようなシステム重視のゲーム開発は大変かもしれません。(追記:VisualDというプラグインが開発されており、VisualStudioからコードの定義ジャンプ・コード補完、ステップ実行・変数のウォッチが可能となっていて結構快適にデバッグできます)

欠点ばかり書いてしまいましたが、言語仕様を調べたり開発環境の構築したりする手間がかかり、初心者向きではないのは確かです。

▼D言語+DXライブラリ

D言語でDXライブラリを使うというのも試してみました。D言語はC言語との親和性が高く、DXライブラリを使っている方もいます。

▼FlexSDK+FlashDevelop

Flashの開発環境の1つであるFlexSDK+FlashDevelopという開発環境です。FlashDevelopだと普通にコードの定義ジャンプや補完、ステップ実行・変数のウォッチができるので楽です。ただ個人的には実行速度を60FPSまで上げられなかったのが不満でしたね。頑張れば高速化できるかもしれませんが、私の力では30FPSあたりが限界でした…。ブラウザで動くこともありWebとの連携が強いのが強みですね。CGIと組み合わせてネットワークゲームを作るのも簡単そうです。

▼Objective-C

iPhoneブームで急速に普及している言語です。iPhoneでゲームを作る場合はObjective-Cを覚えることがほぼ必須です(Objective-CをラップしてJavaScriptで作ることもできるライブラリもありますが…)

個人的な印象ですが、言語仕様としては、C言語になれた人にとっては非常に分かりにくい記法となっており、とっつきが悪いです。

ただ、XCodeでのコード補完やデバッグ機能が強力であったり、iOS SDKで多くの機能が提供されていること、普及していることもあり情報が豊富というのが開発として非常にメリットがあると思っています。

開発に使ったゲームライブラリはCocos2Dで、それなりに簡単にゲームが作れました。今はWindowsやAndroidでも動作する「Cocos2d-x」というのが人気のようです。

▼PHP

最近はゲームの枠組みが広がり、ソーシャル・ネットワーキングサービスを活用したゲームが拡大しています。

そういったソーシャルゲームを作る際に、今一番使われているのがPHPです。サーバ上で動作すればいいのでPHP以外の言語でもいいのですが、WebサーバーのApacheやデータベースであるMySQLとの親和性を考えるとPHPが無難です。情報量の多さも圧倒的です。

個人的には、C言語が使えれば覚えやすい言語ではありますが、拡張による拡張で謎な言語仕様やハマりどころが多い(例えば比較演算子の扱いなど)、エラー処理をちゃんと組まないとバグりやすい(実行時エラーとならずにスルーしてしまう)、など大規模な開発に使うには危険な言語かなと考えています。

個人開発で使うには開発効率がよく、これで十分なのかもしれません。

▼GameMaker:Studio

ゲーム作成ツールの1つで、位置づけとしては「プログラムができなくてもゲームが作れる」といったツクール系に近いのですが、

  • GMLという独自言語でプログラム(スクリプト)をガリガリ書くこともできる
  • イベントコールバックによるすっきりとした記述ができる。衝突判定もイベントなので、自分で衝突判定のコードを書く必要がない!
  • オブジェクト指向的なゲームインスタンスの管理
  • ファイルがすべてXMLのテキストなのでSubversionでの差分管理も可能

と拡張性が高いゲーム作成ツールです。

また、ゲームを作るためのエディタが充実していて、マルチプラットフォーム(Windows / Mac / Linux / iOS / Android / PS4 / Vita / Xbox One)へのエクスポート機能があるため開発効率もかなり良いです。

欠点としては

  • GMLがスクリプト言語としては前世代的(リストやマップ、クラスの言語レベルでのサポートがなく記述が冗長)
  • 日本語の情報が少ない。IDEのメニューが全て英語

というところでしょうか。

そんなわけでリアルタイムゲーム(アクション・シューティング)が効率的に開発できる環境ではあります。一時期は「こんな素晴らしい環境はこれ以外にはない!」と思っていたのですが、冷静に考えると独自言語の仕様が窮屈で、今は封印しています……。

▼Unity

世間ではUnityが大人気なので、その波に乗ってみようとUnityを始めてみました。確かに素晴らしい部分がいくつかあります。

  • インストールが簡単
  • Macでも開発できる。無料でiOSやAndroidへの出力が可能
  • Web上の情報が多い。書籍の数も多い
  • 物理エンジンが組み込まれていて、物理的な挙動が簡単に実装可能
  • C#が強力な記述ができる(関数型プログラムのアプローチ、コルーチンなど)
  • デバッグしながらリアルタイムにオブジェクトのパラメータを変更できる

などなど。やはり多くのゲームで使われているだけのことがあります。

ただ……、2Dゲームを作るにはまだ面倒な印象を受けました。(一部2Dと関係ないことも記述しています)

  • ゲームオブジェクトは3D空間上にいることを意識しなければならない
  • 描画するためにはオブジェクトを作らなければいけない。スプライトへの切り出しやPrefabへの登録が面倒
  • フォントがTTFでないと描画できない(BMPフォントは頑張って自作するかNGUIというアセットを使うと描画できるみたいです)
  • アセットへのアクセスが自由にできない(拡張子が*.txtでないとテキストファイルとして認識されない、など)
  • スクリプトエディタとゲームエディタを行ったり来たりしないとゲームが作れない(専用のVSプラグインを購入すると解消できるみたい)
  • スクリプト以外はバイナリデータで管理されている (VCSで管理しづらい)

まあUnity2Dはまだ出たばかりなので、これから大きく発展するのかもしれません。あと2D周りは有料アセットを購入することで、改善することができるようですが、ソースコードを公開にする際にそれを含めることができません。

そんなこんなで2週間ほど検証しましたが、上記の不便さが勝ったので、今のところは導入を見送っています。ですが世間で多く使われているということは、私の考える問題はマイナーで大したことないことなのかもしれませんね……。

▼HaxeFlixel

さてはてUnityはどうも納得行かない……。どうしようか……。と、さまよいながら見つけたのがHaxeFlixelというゲームライブラリでした。これはHaxe+OpenFLというクロスプラットフォーム環境で動作する2Dゲームライブラリです。

もともと、Flashの代替として作ったもののようですが、今では Windows / Mac / Linux / iOS / Android など……、とマルチで動作することが可能となっています。

さらにHaxeFlixelはゲーム専用のライブラリなので、ゲーム作成に役立つ物理エンジンやゲームオブジェクト管理、パーティクルシステム、デバッグシステム、など効率的に開発できる機能が数多く含まれています。

言語仕様としてはHaxeという言語で、ActionScriptに近い記述方法となります。特に新しいパラダイムはないのですが、記述力はそれなり高く、今どきの書き方は、たいていできるようになっているので、なかなか快適なプログラムができます。IDEにはFlashDevelopが使えますし、Intellij IDEAという環境も使えます。どちらもコード補完や定義ジャンプがバリバリ使えるので、非常に効率的な開発ができます。

ということで、現時点(2014/6/20)で使用しているお気に入りの環境となっています。

欠点としては、日本ではあまり使われていない(特にHaxeFlixelの情報はほぼ皆無)なので、英語情報やソースコードを読んで理解するしかないです。コードはオープンソースなので、頑張れば仕組みを理解できるのもいいですね。(Unityはクローズドコード)

ちなみにひっそりとHaxeFlixelのまとめ情報ページを作っていますので、興味があればこのページを訪れてみてください

はてなブックマーク - ゲーム開発環境のまとめ

Tags: , , , , , , , , , , , , ,


メニュー

よく見られているページ