パズどら(仮
パズどら作ってます。
もうすぐリリースします。
ここがサポートページになる予定です。
まぁ。そんなこと。
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, テキストエディタ
EclipseでLuaプラグインで余裕でした。
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はテーブル万歳なんだなヽ(^。^)ノ
でも、逆にシンプルで全然嫌いじゃない。むしろ好き。
あとは下の本を読むか実際のプロジェクトのコードを読んでいって慣れていこうと思います。
スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)
- 作者: 浜中誠
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2010/09/30
- メディア: 大型本
- 購入: 5人 クリック: 95回
- この商品を含むブログ (7件) を見る
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"; }
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++; }
while(i < 10) do i++ end
12, for文の使い方
PHP
for(i=1, i > 10, i++ ){ echo i."回目"; }
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; }
function sum(x,y) return x+y end
17, 関数の戻り値の受け取り方
listを使わずに複数の変数をうけとれる。
PHP
function hoge(){ return array(x, y); } list(x, y) = hoge();
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を使うのとでは、
やはり処理面に大きく差がでるとは思う。
それを補うほどゲームエンジンを使用することでゲーム開発が楽になるのは確かだ。