CoronaSDK導入まとめ

本日、上京して4年がたちました。

4年もいるのに未だに新宿で迷子になります。

ごきげんよう。私です。



今更だけど、CoronaSDK導入をまとめたので、

記事にしてみました。参考になれば幸いです。





公式サイト

http://www.anscamobile.com/



日本コロナの会

https://groups.google.com/group/coronaja





導入



1, ダウンロード

http://developer.anscamobile.com/downloads/

メールアドレスとパスワードを入力してダウンロード



2, インストーラを起動してCoronaSDKをインストールする。



3, アプリケーションアイコンをクリックで起動

Agreeで進む。Emailとパスワードを聞かれるので

ダウンロード時と同じものを入力してLogin




4, 買うか、聞かれるので最初は Continu Traialで進む。

後で買うこともできます。




5, Welcome画面が起動する。

とりあえず、Example games and apps で遊びまくる。






プロジェクト - HelloWorldを作成する。



0, テキストエディタ

EclipseLuaプラグインで余裕でした。

http://luaeclipse.luaforge.net/preview/update-site/

Vi, Emacs m9(^Д^)プギャー



1, プロジェクトディレクトリの作成

PC上の任意の場所にプロジェクト用のディレクトリを作成

名前を仮にHelloWorldとする。



2, ディレクトリとファイルの構成

アプリケーションのメインとなるコードを 「main.lua」とする。


\-- HelloWorld
\-- main.lua

\-- 文字列描写
local text = display.newText("Hello World", 20, 20, native.systemFont, 50)


3, CoronaSimulatorよりFile -> main.luaをクリックで実行






やばい、ちょう楽チンでした。

これは、手応えなさすぎなので簡単なゲームを開発します。

それは後日にでも。

PHPerがLuaを触ってみて、厄介だと思った箇所 - 応用編

こんにちわ!サカナクションのライブで跳ねすぎて筋肉痛。

ごきげんよう。私です。

PHPerがLuaを触ってみて、厄介だと思った箇所 - 応用編

前回の続きLuaオブジェクト指向を使う方法

まずは、テーブルとメタテーブルの使い方を覚える必要がある。





テーブル



Luaにはまとめてデータを扱う仕組みとしてテーブルと呼ばれるものがある。

PHPだと連想配列とかC言語で言うところの構造体っぽいもの。



テーブル作成方法

table = {}



値の入れ方

table["test"] = "hoge"
table = {test1 = "hoge", test2 = "fuga"}
table.insert(table, "moge")





イテレータ用関数



テーブルのキーが文字列の場合は、pairs関数

数字の場合は、ipairs関数を使用する。


t = {}
t["test1"] = "hoge"
t["test2"] = "fuga"
t["test3"] = "moge"

for i, ver in pairs(t) do
	print(ver)
end
hoge
fuga
moge





メタテーブル



メタテーブルを利用するとテーブルや演算子の役割を置き換えることができる。

メタテーブルを活用すれば,テーブルがあたかもクラスであるかのように扱うこともできます。



メタテーブルには __で始まる文字列が予め用意されていて、

この文字列をイベント、値をメタメソッドと言いオブジェクト(テーブルとか値)の

動作をいくつかの面で変えることが出来る。(リファレンスみてください。)



テーブルのメタテーブルは setmetatable関数で変更することが出来る。




t1 = {value = 20}
t2 = {value = 30}

mt = {
   __add = function (l , r)
	    return l.value + r.value
	 end
}

\-- t1テーブルをmt定義に置き換える。
setmetatable(t1, mt)

print(t1 + t2)
\-- __add は + 演算が実行されるときに呼ばれる。便利ー!
⇒ 50





クラス



Lua自体にクラスは無いが、テーブルとメタテーブルを使うことで

オブジェクト指向で記述することができる。





プロトタイプベースオブジェクト指向



Luaでは以下のように値、関数を呼ぶことが出来る。

テーブル内の値を呼ぶ際に「table["key"]」 とかくところを 「table.key」

テーブル内の関数を呼ぶ際に「table.key(value)」とかくところを「table:key(value)」


\-- オブジェクト作成
Dog = { name = "Jiro" age = 3 showProfile = function(self) prof = string.format("name=%s, age=%d", self.name, self.age) print(prof) end } \-- showProfile メソッドを呼ぶ Dog:showProfile()





クラス定義



Luaにはnew演算子が用意されていないので

newと同じような動作を行うメソッドを用意する必要がある。



Luaにはオブジェクト指向の継承を実現する仕組みが用意されている。

継承を実現するために、メタテーブルには __indexというイベントがる。

メタテーブルの __indexにスーパークラス(継承元のクラス)を指定することで

継承を実現することができる。



__indexにスーパークラスのオブジェクトを設定すると

そのオブジェクト自身のキーを探したあと、スーパークラスのオブジェクトの

プロパティを探しに行くようになる。





無名関数を使う際に以下の記述でもできる。

function table-name:function-name ~ end



table-name.element = function() ~ end





例:クラス

Point = {}

function Point:new()
	local t = {}

	t.x = 0
	t.y = 0

	\-- 自分自身を継承する。
	setmetatable(t, {__index=Point})
	return t
end

function Point:set(dx, dy)
	self.x = dx
	self.y = dy
end

\-- 呼び出し
pt1 = Point:new()
pt1:set(10,10)





例 : 継承

\-- 親クラス
Animal = {}
Animal.name = "unknown"
Animal.showProfile = function(self)
	print("*** profile")
	print("name="..self.name)
end

\-- 小クラス
Dog = {}
Dog.new = function (name) 
	local obj = {}
	obj.name = name
	setmetatable(obj,{__index=Animal})
	return obj
end

\-- 呼び出し
jiro = Dog.new("jiro")
jiro:showProfile()







これで、ある程度の基礎は掴んだつもり...

Luaはテーブル万歳なんだなヽ(^。^)ノ

でも、逆にシンプルで全然嫌いじゃない。むしろ好き。

あとは下の本を読むか実際のプロジェクトのコードを読んでいって慣れていこうと思います。

PHPerがLuaを触ってみて、厄介だと思った箇所 - 基本編

こんにちわ!あの花と仁でボロ泣きして頭痛が痛い。

自称24歳私でちゅ。

今日は、Luaを触ってみたので感想を書いてみました。

Luaとは?



プログラムに組み込むスクリプト言語

小さく、シンプル

C言語だけあれば動作する。

Ruby, Pythonよりは高速に動作する。

主にゲーム開発などに用いられることが多い。

ソニックアイドルマスターなどもLuaで開発されている。



Lua公式ドキュメント

http://www.lua.org/



LuaWiki

http://lua.mine.nu/w/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8



Luaプログラミング入門

http://karetta.jp/book-cover/lua



プログラミング言語Luaの紹介

http://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html



高速スクリプト言語Lua」を始めよう!

http://www.hakkaku.net/articles/20081023-283





インストール方法



Mac

macportで余裕でした。

$ sudo port install lua

※依存関係があるとうまくいかないことがある。



ソースからインストール

http://dgames.jp/dan/permalink/20100228



Windows

m9(^Д^)プギャー





PHPerがLuaを触ってみて、厄介だと思った箇所 - 基本編



1, 基本関数の使い方はJSやAS3っぽい。

2, 末尾に;(セミコロン)がいらない。

3, コメントは // じゃなくて -- 複数行コメント --

4, 文字連結が .. (ドット2つ)

5, NULLがnil



6, if文の使い方がRubyっぽい。



PHP

if (result >= 60) {
	echo "test1";
}elseif(result >= 50){
	echo "test2"
}else{
	echo "test3";
}



Lua

if (result >= 60) then
	print("test1")
elseif (result >= 50) then
	print("test2")
else
	print("test3")
end



7, 0は偽条件ではない

hoge = 0
if ( hoge ) then
        print("second")
end
=> second



8, != ではなく ~=



9, xがyと等しくなければ真,そうでなかったら偽

hoge = 1
if( hoge ~= 1 ) then
        print("Hello")
else
        print("World")
end
=> World



10, &&, ||, ! ではなく and, or, not



11, while文の使い方

doを付けなければならない。



PHP

while(i  < 10){
	i++;
}



Lua

while(i < 10) do
	i++
end



12, for文の使い方



PHP

for(i=1, i  > 10,  i++ ){
	echo i."回目";
}



Lua

for i=1, 10, 1 do
	print(i.."回目")
end



13, breakがendの手前でしか使えない。


for i = 0, 10 do
	print("test1")
	-- ここでbreakしたい。
	print("test2")
end
=> test1
test2


for i = 0, 10 do
	print("test1")
	-- このように対応
	do
		break;
	end
	print("test2")
end
=> test1



14, switch文がない。

15, foreach文がない。



16, 関数の作り方



PHP

function sum(x, y){
	return x+y;
}



Lua

function sum(x,y)
 	return x+y
end



17, 関数の戻り値の受け取り方

listを使わずに複数の変数をうけとれる。



PHP

function hoge(){
	return array(x, y);
}
list(x, y) = hoge();


Lua

function hoge()
	return x, y
}
x, y = hoge()



18, 無名関数が使える。(PHPでも使えたかな...)



19, Luaの中の関数は全てグローバル変数になる。

関数内だけで使いたい場合には local var みたいなかんじにする。


オブジェクト指向がかなり特殊な感じ...これは後日まとめて記事にしたいと思います。


感想

かなり、Rubyっぽい感じですね。

今回は記事にしていませんが、オブジェクト指向が結構めんどくさそうな気がする。

Cを直接記述することに比べるとやはりかなり楽。

プログラム経験者なら触りながら覚えられる。

あとは、基本関数がどれだけ充実しているかかな...

UnityとCoronaSDKと独自ゲームエンジンのメリットとデメリット

こんにちわ!絶賛ニート生活実施中な私です。

しかし、そんな生活ともそろそろおしまい...

7月から週3は業務委託の仕事をすることになりました。

(正直、定期収入がないのにドキマキしていたので一安心ですw)



さて、最近スマートフォン開発に夢中な私ですが、

開発環境に関してはやはり厳選して決めていきたい。

簡単に開発環境を決めてしまって気に入らずちょくちょく変えることになると

学習コスト、などデメリットが多いので色々と少しずつ触って実際にどのような開発環境が

ベストなのか自分なりに考えてみました。



最低条件として考えているのが

マルチプラットフォーム化とできるだけネイティブ言語を触らずに開発ができること。



そういう点で使えるゲームエンジンをあげると

Unity3D, CoronaSDK, 共通ライブラリ+各種ゲームエンジンと3つに絞れました。



この3つのメリット、デメリットを以下にあげていこうと思います。



Unity3D



メリット

  • ゲームエンジンとしての完成度が高い。
  • 英語での情報量が多い。(書籍、サイト)
  • 人気が高い。
  • Pro版でネイティブ言語での拡張ができる。
  • 開発事例が多い。



デメリット

  • 学習コストが高い。
  • 日本語の資料がほとんどない。
  • ツールの操作を覚えるのが大変
  • Pro版で40万円以上かかる。
  • ツールでの開発がメインになるので開発共有がしにくそう。



感想

本格的な3Dゲーム開発ができるが、

学習コストが高く。値段も高いので手が出しにくい。

また、本格的な開発だが共有がしにくいイメージでノウハウ蓄積が必要になりそう。

2Dゲームやソーシャルゲームを作るという点ではオーバースペックなのは確か。

ただし、拡張ができることや。Gree,DeNAがプッシュしているなど

今後のゲームエンジンのトレンドになることは間違いなさそう。







CoronaSDK



メリット

  • 学習コストが低い。
  • 言語がLua
  • ドキュメントが分かりやすい。
  • 日本語フォーラムが活発(日本コロナの会)
  • 安い。
  • Pro版で4万円
  • 開発事例が多い。



デメリット

  • ネイティブ言語での拡張ができない。
  • ビルドが開発会社依存



感想

Luaでの開発が簡単なのと、安い。

2Dゲーム専門なのでUnity3Dと比べると学習コストは正直半分以下なんじゃないかと思う。

ドキュメントや日本語フォーラムなど充実がすごい。

ただし、一番のネックがネイティブ言語の拡張ができないこと。

 また、ビルドが開発会社に投げて行う。という点もかなりのデメリット

会社がなくなれば終わりになる...

ただし、このデメリットを考えてもCoronaSDKのAPI

やりたいことが全てできるのであれば、2Dゲーム、ソーシャルゲーム開発では

CoronaSDKで確定といってもいい。それぐらい魅力的。





共通ライブラリ+各種ゲームエンジン



iphoneだとLuaからcocos2Dを使用する。

AndroidだとLuaからe3roidを使用する。

使用する箇所を共通化してしまう。という方法



Lua --- 共通ライブラリ --- cocos2D

|- e3roid



メリット

  • 拡張性が高い。
  • 制限が無い。なんでもできちゃう。



デメリット



感想

正直、理想的だと思う。ただし独自で作ることになるので

開発、維持コストが掛かる。

じっくりコトコト作る場合であればこの手法を使うのがベスト

または、最初はiphoneだけでいいよ〜などそういう場合でもこっちが良い。

ただし、ネイティブ言語の知識がやはり必要になってくるだろう...

どのゲームエンジンでも拡張するならそうなんだけど。







全体的な感想

何を作るか、期間はどれくらいか、何で出すか。など色々な要素が組み合わさって

使用するゲームエンジンが決まってくる。



個人的には、Unity3Dだいすきーと押しているが、

ゲームエンジンを使うこと自体がゲームエンジンに依存することになり、

技術者レベルの低下につながることと、他で通用しなくなること、などを踏まえて

共通ライブラリ+各種ゲームエンジンを使うことがいいんじゃないかと思っている。



ただし、共通ライブラリを作る点はやはり敷居が高い。

(そのためのUnityだったりCoronaだったりするわけだからw)



仕事でゲームエンジンを使用するのであれば、企画段階で制限を付けて

Coronaで行くというのがスムージーなのかもね。





さてー。いろいろまとめたけど、Luaちんぷんかんぷんだから勉強しないトナー。

トナー。トナー。トナー。




Unity3Dで簡単なシューティングゲームを開発してみました。

こんにちわ!バッティングセンターの筋肉痛が2日遅れで来た

自称24歳のおっさんこと私です。



まいどお馴染みUnity3Dでほんと〜〜〜に簡単なシューティングゲームを開発してみました。

その過程をメモったので公開します!

宜しければご参考ください。(といってもいろいろ突込みどころあると思いますがw)



バグはある。それは知っていますが、アドバイスなどその他いろいろは

gakushi0130(あっと)gmail.com または @gakushi0130まで。



完成ゲーム 動作↓

http://dl.dropbox.com/u/22293811/ShootingGame.html



ゲーム説明



左右キーで移動

スペースで弾を発射します。



Start Gameで開始



1000点とると勝ち

3回隕石に当たると負け



仕様設計?なにそれ?美味しいの?





1, キャラクターを作成する。

GameObject -> Create Other -> Cube

キューブが出来る。

Cubeの名前をPlayerに変更



2, 照明を作成する。

GameObject -> Create Other -> Directional Light

照明が出来る。



3, メインカメラの設定

MainCamera -> Inspector

Background : #000

Projection : Orthographic

Size : 5

上記のように変更する。

このカメラ設定が2Dゲームの基本になる。





4, プロジェクトセッティング 入力に関してのセッティング確認

Edit -> Project Setting -> Input



Horizontal : 左右の動きを設定する。

Vertical : 上下の動きを設定する。





5, 矢印キー左右で動くように設定



PlayerBehaviourScript.js


var playerSpeed : int;

function Update () {
	// Input.GetAxis("Horizontal") : X軸を返す。
	// Time.deltaTime : 最後のフレームが完了するために使った時間
	amtToMove = (playerSpeed * Input.GetAxis("Horizontal")) * Time.deltaTime;
	
	// transform.Translate : 指定した方向と値で移動する。
	transform.Translate(Vector3.right * amtToMove);
}





6, Rigidbodyの設定

Rigidbodyはプレイヤーの物理シュミレーションなどを設定する。

UseGravity : 重力 OFF

Is Kinematic : 運動力学 ON

※ 何が変わったかチェックすること。

上記のように設定





7, プレイヤーの残機とスコアを入れる変数を作成する。



PlayerBehaviourScript.js


var playerLives : int;

// static : 全てのコードで有効な変数
static var playerScore : int;





8, 画面上にスコアと残機数を表示する。



PlayerBehaviourScript.js


function OnGUI(){
	
	// GUI.Label : 画面上に文字を表記する。
	// Rect : 2Dで位置とサイズを指定する。
	GUI.Label(Rect(10,10,200,50), "Score: " + playerScore);
	GUI.Label(Rect(10,30,200,50), "Lives: " + playerLives);
}





9, 弾を作成する。



Edit ->GameObjedt -> Sphere

玉が作成される。

大きさを調整する。

Scale X Y Z : 0.3

名前をBulletに変更する。



マテリアル作成

Project -> Create -> Material

名前をBulletMaterialとする。

色を調整したあとBulletにドラックアンドドロップで色を変更する。



BulletにRegitbodyを適応させる。

Compornent -> physics -> Rigidbody

Playerと同じように設定する。

Use Gravity : Off

Is Kinematic : On



10, 弾を制御するスクリプトを作成する。



BulletBehaviourScript.js


var bulletSpeed : int;

function Update () {
	
	// キー入力に関係せず上に飛ぶ。
	amtToMove = bulletSpeed * Time.deltaTime;
	transform.Translate(Vector3.up * amtToMove);
	
	// Yが6.5に達した場合 Bulletを削除する。
	if(transform.position.y >= 6.5){
		Destroy(gameObject);
	}
	
}





11, Bulletをプレハブ化する。

※ プレハブ化とはゲームオブジェクトの「作り置き」

Create -> Prefab

名前をBulletPrefabとする。

Bullet GameObjectをBulletPrefabにドラックアンドドロップ

Bullet GameObjectはいらないので削除する。



PlayerBehaviourScript.js

var Bullet : Rigidbody;



Inspector -> Bulletの箇所にBulletPrefabをドラックアンドドロップする。









12, プレイヤーから弾を発射できるようにする。



PlayerBehaviourScript.js


function Update () {
	
	amtToMove = (playerSpeed * Input.GetAxis("Horizontal")) * Time.deltaTime;
	transform.Translate(Vector3.right * amtToMove);
	
	// スペースを押したかを判定
	if (Input.GetKeyDown("space")) {
		
		// Bullet GameObjectを作成する。
		// transform.position, transform.rotation : Playerの位置を指定する。
		var tempBullet : Rigidbody;
		tempBullet = Instantiate(Bullet, transform.position, transform.rotation);
	}
}





13, 効果音の作成

sfxr

http://www.drpetter.se/project_sfxr.html

cfxr

http://thirdcog.eu/apps/cfxr



それぞれ効果音を作成することができるフリーソフト

弾を打ったときの効果音を適当に作成する。

名前をshootとする。



BulletPrefab -> Compornent -> Audio -> Audio Source



BulletPrefab -> Inspector

Audio Clipにshootをドラックアンドドロップする。



これで弾を発射したとき音がなるようになる。





14, 敵を作成する。



GameObject -> Sphere

名前をEnemyとする。

Project -> Create -> Material

適当にマテリアルを作成してEnemyに適応させる。





15, 敵を制御するスクリプトを作成する。



EnemyBehaviourScript.js


var enemySpeed : int;

function Update () {

	amtToMove = enemySpeed * Time.deltaTime;

	transform.Translate(Vector3.down * amtToMove);

	// 敵が画面外にでた場合にXをランダムで上に戻す。
	if (transform.position.y <= -1) {
		transform.position.y = 9;
		transform.position.x = Random.Range(-15, 5);
	}
}





16, 弾が敵にあたったときの判定を行う。



まず、Enemy GameObject -> Inspector ->Box Collider

Is Trigger を Onにする。



新規タグを追加する。

Enemy -> Inspector -> Tag -> Add Tag

Element0 : Enemy と追加する。

Enemyのタグを先ほど追加したEnemyにする。



※ 必ず Enemy, Player, Bullet の Z軸を0に揃えること。



BulletBehaviourScript.js


// トリガーに接触した場合に呼ばれる。
function OnTriggerEnter(otherObject : Collider){
	
	// Enemyタグに接触した。
	if (otherObject.gameObject.tag == "Enemy"){
		
		//Debug.Log ("Hit!!!");
		
		// 接触後の処理

		// スコアを追加する。
		PlayerBehaviourScript.playerScore += 100;

		// 弾, 敵の削除再配置
		otherObject.gameObject.transform.position.y = 9;
		otherObject.gameObject.transform.position.x = Random.Range(-15, 5);

		Destroy(gameObject);
	}
}





18, 弾が敵にあたったときの爆発の演出



Edit -> GameObject -> Create Other -> Particle System

名前をExplosionとする。

Size関係やParticle Animator で爆発のアニメーションを調整する。

※ AutodestructをOnにすること。消えなくなる。



Explosionをプレハブ化する。

Create -> Prefab

名前をExplosionPrefabとする。



爆発の効果音を作成する。

ExplosionPrefab -> Compornent -> Audio -> Audio Source

効果音をExplosionPrefabにドラックアンドドロップして適応させる。



BulletBehaviourScript.js


var explosionPrefab : Transform;



BulletPrefab -> Inspector -> Explotion

ExplosionPrefabをドラックアンドドロップする。





BulletBehaviourScript.js

OnTriggerEnter 追加


		var tempExplosion : Transform;
		tempExplosion = Instantiate(Explosion, transform.position, transform.rotation);







19, プレイヤー衝突判定と爆発アニメーション



Edit -> GameObject -> Create Other -> Particle System

名前をPExplosionとする。

Size関係やParticle Animator で爆発のアニメーションを調整する。

PExplosionをプレハブ化する。



PlayerBehaviourScript.js


var PExplosion : Transform;



BulletPrefab -> Inspector ->P Explotion

PExplosionPrefabをドラックアンドドロップする。





PlayerBehaviourScript.js


function OnTriggerEnter(otherObject : Collider){

	if(otherObject.gameObject.tag == "Enemy"){

		otherObject.gameObject.transform.position.y = 9;
		otherObject.gameObject.transform.position.x = Random.Range(-15, 5);

		// プレイヤー爆発アニメーション
		var tempPExplosion : Transform;
		tempPExplosion = Instantiate(PExplosion, transform.position, transform.rotation);

		// ライフを減らす。
		playerLives -- ;
	}
}





20, 勝敗判定



PlayerBehaviourScript.js

Update 関数内


	if(playerScore >= 1000){
		print("YouWin!!!");
		Application.LoadLevel(3);
	}else if (playerLives <= 0){
		//print("YouLose...");
		Application.LoadLevel(2);
	}





21, メインメニュー, 勝利, 敗北画面作成



File -> NewScene

名前をmainMenue, win, loseとそれぞれ作成する。



File -> Build Setting

全てのシーンを放り込む。そのまま閉じる。





22, メインメニューのスクリプトを作成する。



以下のスクリプトをMainCameraに適用させる。



mainMenueBehaviourScript.js


function OnGUI () {

	instructionText = "左右キーで移動\nスペースで弾を発射します。";
	GUI.Label(Rect(10,10,300,200), instructionText);

	if (GUI.Button(Rect(10,60,200,50), "Start Game")){
		Application.LoadLevel(1);
	}
}





23, 敗北のスクリプトを作成する。



以下のスクリプトをMainCameraに適用させる。



LoseBehaviourScript.js


function OnGUI () {
	if(GUI.Button(Rect(10,10,300,50), "You Lose... Press To Play Again!")){
		Application.LoadLevel(0);
	}
}





24, 勝利のスクリプトを作成する。



以下のスクリプトをMainCameraに適用させる。



WinBehaviourScript.js


function OnGUI () {
	if(GUI.Button(Rect(10,10,300,50), "You Win!!! Press To Play Again!")){
		Application.LoadLevel(0);
	}
}





25, Web で遊べるようにビルドする。



File -> Build Setting -> Build

作成されたファイルをアップすれば遊べます!


次は何つくろうかな〜。

スマートフォンゲーム開発で使えるゲームエンジンをまとめてみた

スマートフォンゲーム開発で使えるゲームエンジンをまとめてみた。



こんにちは!絶賛ニート街道まっしぐらな私でう!

最近、Unity3Dでゲーム開発をしているのですが、他にもたくさんの

ゲームエンジンがあるようなので軽く調べてみました。







★ 3D向けゲームエンジン



Unity3D

http://unity3d.com/

開発言語:JavaScript, C#

注目度:★★★★★



最近、巷で話題のゲームエンジンです。

ツールで簡単に3Dゲームの開発ができます。

プログラムの記述もJSでできツールの完成度は素晴らしい。

3Dでiphone向けアプリを作るのであれば一番の有力候補



実績:LightBike2

費用:フリー版と有料版に分かれる。有料版で制限なしで使う場合、80万程度

3Dゲームエンジンの中ではかなり格安!

難易度:ドキュメントは基本英語なので英語力、もしくはシックスセンスが必要です。

日本語の情報、チュートリアルも徐々に増えてきている。★★★





Unreal Engine

http://www.epicgames.com/

開発言語:UnrealScript

注目度:★★★



FPS,MMOの開発で実績のある、ゲームエンジンです。

たぶん、ゲームエンジンの中で一番有名かつ人気があるんじゃないかと思う。

超本格的な3Dゲームを作ることができる。

どちらかと言えば、少人数で使用するというより大規模開発向け?なのかと思う。

スマホFPS作りたいのであれば、UnrealEngineじゃね?ぐらいに思っている。



実績:リネージュII, ラグナログ?など。

スマートフォンだとデモアプリのEpic Citadelを見ると感動する。

費用:?+インセン?

難易度:ドキュメント、ツールは公式でしっかりと日本語化されており、Unity3Dよりかは親切

ただし個人で使用している人が国内ではかなり少なく個人の情報発信はあまりない。

かつ、大規模開発向けだと思うので個人ではここまで必要ない気もする。

UnrealScriptに関してはJavaっぽい言語思想らしい。 ★★★★★





SIO2

http://www.sio2interactive.com/



開発言語:Python

注目度:★★★



iphone向け3Dゲームエンジンの初期一番の有力候補

スクリプトPythonで書けるところがかなり魅力的です。



実績:iphoneアプリでいくつか。

費用:MITライセンス

難易度:日本語ドキュメントはない。英語ドキュメントはチュートリアルもありしっかりしている。

スクリプトPythonということもあり取っ付き易い。★★★★











2D向けゲームエンジン



Corona

http://jp.anscamobile.com/corona/

開発言語:Lua

注目度:★★★★



最近、注目度が上がってきているゲームエンジンです。

日本語のコミュニティ、ドキュメントもしっかりしており

2Dゲームエンジンの最有力候補

スクリプトの記述がLuaでできるというところも素敵だ。

ただし、開発ツールに関しては最低限のものしかなくTorqueに比べると弱い。





実績:iphoneアプリたくさん出ている。

費用:無料

難易度:日本語資料が豊富、コミュニティもあるのと

スクリプトLuaなのも分かりやすい。

簡易的だが開発ツールもある。★★★





Torque 2D

http://www.garagegames.com/products/torque-2d/iphone

開発言語:C++

注目度:★★★★



2Dゲーム開発限定のゲームエンジンです。

海外ではかなり人気があるっぽい。ぱっと見た感じだとツールなどの使いやすさは

2Dゲーム限定ということで一番使いやすそう。かつ感覚的にわかった。

価格は99ドルとめちゃんこ安い。

個人的にはUnity3Dと同じぐらい使ってみたいゲームエンジン



実績:iphoneアプリたくさん出ている。

費用:99ドル

難易度:日本資料はほぼない。海外ドキュメントはしっかりしており、

かつツールの使いやすさは2Dということもあるがかなり完成度がたかい。

英語がわかればかなり分かりやすいゲームエンジンだと思われる。

ただし、コードの記述がC++なのが敷居を高くしている。★★★★



cocos2d

http://www.cocos2d-iphone.org/

開発言語:Object-C

注目度:★★



LGPLライセンスで公開されている2Dゲームエンジンです。

開発ツールみたいなのは、存在していないですが無料なのが魅力的

ただし、iphone限定なのがネック



実績:iphoneアプリたくさん出ている。

費用:LGPLライセンス

難易度:日本資料はほぼない。海外ドキュメントはそこそこあるが、

個人(たぶん)で開発しているのでそこまでの情報量はない。

またObject-Cを知らないとてんでダメというところも痛い。★★★★★





まとめ



3Dに関しては個人的にはUnity3Dが有力だと思っている。

2Dに関してはCorona, Torque 2Dで悩む。

正直なところ、Unity3Dで2Dゲームを作っちゃえばいいかなーと(笑

あとはゲームエンジンを使用することで処理面など比較してみたいとは思っています。



Object-CやJavaで記述するのとUnityやCoronaを使うのとでは、

やはり処理面に大きく差がでるとは思う。



それを補うほどゲームエンジンを使用することでゲーム開発が楽になるのは確かだ。