5.1さらうどん

@giginetの技術ブログ。ゲーム開発、iOS開発、その他いろいろ

OUYA+cocos2d-xで始めるゲーム開発入門

OUYA買いました

f:id:gigi-net:20130705194043j:plain

OUYA

発売前からPre Orderしていたのがようやっと届きました!

OUYAって何?

意外と知らない人が多いようで、OUYA買ったよー!と言っても反応してくれる人がそこまで多くなかったので、簡単に説明しておきます。

OUYAは6月末に発売されたAndroid搭載の家庭用ゲーム機で、以下のような特徴があります。

  • Android4.1.2搭載
  • 安価(コントローラー込みで$99)
  • ルービックキューブサイズ
  • ハック可能(開発ツールが公開されていてゲーム開発が容易)
  • Free to Play(全てのゲームが無料提供。コンテンツ課金が中心)
  • HDMI, Bluetooth, USBなど拡張性が高い

プレイヤーは無料でゲームが遊べ、開発者にとっては、開発環境を選ばない、HD出力可能、規格化されたコントローラーが利用可能、無料と、非常に開発のしやすいプラットフォームになっています。

ファーストインプレッション

期待度大のオープンソースゲーム機「 OUYA ( ウーヤー )」を試してみた 【@maskin】 | TechWave

詳しくは上記の記事を読むといいと思います。

ちなみに、モノによるそうですが、僕が購入したものは、プラグが日本の物に対応していないロットだったようで、別途変換コネクタの購入が必要になります。

f:id:gigi-net:20130705233425j:plain

ACアダプターを見たところ、電圧は100Vに対応しているので、プラグの変換だけでOK。

[asin:B00BWG23E2:detail]

また、地味にmini-USBケーブルが付属していないため、開発したい方は別途用意しましょう。HDMIケーブルは最初から付属していて良心的!

さっそくゲームを作ろう!!!

正直、現状ロクなゲームがないので、遊ぶために買うのは非常にオススメしません。なぜかAndroidが搭載されているのにも関わらず、Google Playには直接接続できないため、現状遊べるソフトは100本程度に限られているし、ゲームの質もインディーズレベルの物が多いです。

OUYAを購入した方の多くはゲーム開発者だと思うので、以下、OUYA上でのゲーム開発についてお伝えします。

この記事について

この記事では、以下のような情報についてお伝えします。

  • OUYAアプリケーション開発環境構築について
  • OUYA Development Kit(ODK)について
  • OUYA上でのcocos2d-xの実行について
  • ODKをC++上から利用する方法について
  • サンプルコード

また、この記事ではMacOSX上での開発を前提としていますが、環境に依存せずに開発できると思います。

Android開発環境の構築

OUYAはAndroid SDKで開発したアプリケーションをそのまま走らせることができるため、基本的な開発はAndroidアプリケーションの開発手法に則って行われます。

Androidの開発環境については、ググればいくらでも出てくるので以下の記事をご参照ください。

初心者必見!MacでAndroidアプリの開発環境を整えよう【SDKインストール】 | GanoWeb

OUYA実行環境の構築

docs/setup.md at master · ouya/docs

こちらにOUYA開発環境の構築方法が載ってます。

一応動画が付いているのですが、解像度低すぎで何やってるかサッパリなので、要点だけ書きます。(Macでの構築方法。Windowsの方は上記記事参照のこと)

Android SDKを導入してPATHを通す

上記記事参照

Android SDK 4.1.2の導入

OUYA上のOSはバージョン4.1.2なので、android sdkコマンドを実行し、GUIからインストールしてください

USB Vendor IDの登録。
echo "0x2836" >> ~/.android/adb_usb.ini
adb kill-server
adb devices

この手順を踏むことで、OUYAがAndroid端末として認識され、実機実行が可能になります。

サンプルアプリを動かしてみよう

OUYA Development Kit(ODK)の導入

OUYAの開発キットを導入します。

OUYA Developers

こちらのサイトからダウンロードしましょう。ざっくり見た感じ、以下のような機能が使えるようです。

この中にサンプルプロジェクトが3つ含まれているので動かしてみましょう

  1. Eclipseを起動し、File > New > Other > Android Project from Existing Code.を選択
  2. OUYA-ODK/Sample/から実行したいフォルダを選択して追加
  3. プロジェクトツリーで右クリックし、Run AS > Android Application
  4. Deviceでouya-ouya_consoleを選択

今までの手順が上手くいっていれば、実行可能なデバイスにOUYAが表示されているはずです。

f:id:gigi-net:20130706221727j:plain

例えば、game-sampleを実行すると、ATARI時代に戻ったかのような、目に痛い全方位シューティングが起動します。

f:id:gigi-net:20130706221518j:plain

cocos2d-xプロジェクトを動かしてみよう

さて、ここまで来たらゲーム開発をすぐにでも始められるので、Android開発の経験がある方はガリガリ作ってください。

僕はAndroid環境での開発は慣れていないので、cocos2d-xを利用して開発することにします。

cocos2d-xのAndroid開発環境構築が非常に面倒なので以下に説明します。

大筋は下記の記事に従えばOK

Cocos2D-X Tutorial for iOS and Android: Getting Started

Native Development Kitの導入

Android SDKの他に、NDKと呼ばれる、Android上でネイティブコードを走らせる仕組みを導入する必要があります。

Android NDK | Android Developers

導入して適当なところに置きましょう。今回は/Application/Androidの下に置きました。

その後、NDK_ROOT, ANDROID_SDK_ROOTを環境変数に追加してください

launchctl setenv NDK_ROOT /Application/Android/android-ndk-r8e
launchctl setenv ANDROID_SDK_ROOT /Application/Android/sdk
cocos2d-xのダウンロード

Cocos2d-x | Download

ダウンロードしましょう。今回は2.1.4で検証。

また、解凍したディレクトリのパスをCOCOS2DX_HOMEとして環境変数にしましょう

launchctl setenv COCOS2DX_HOME /path/to/cocos2d-x-2.1.4
プロジェクトの作成

解凍したディレクトリにあるcreate_android_project.shを走らせましょう。対話環境が立ち上がるので、以下の項目を順に入力してください

  1. パッケージ名(ここではorg.kawaz.ouya)
  2. ターゲット番号(表示されている一覧から、2.1.4を示すIDを入力してください)
  3. プロジェクト名(ここではHelloOUYA)
ビルド

COCOS2DX_HOMEに今作成したプロジェクトのフォルダができているので、proj.android以下にあるbuild_native.shを実行してください

Eclipseに追加

先ほどのサンプルと同様にEclipseに追加しましょう

Eclipse上でC++のコードをビルド

毎回build_native.shを走らせるのはダルいので、Eclipseの設定を変更して自動でビルドできるようにしましょう。上記の記事に詳しく書いているので各自ご確認ください。

実機実行

ここまでのステップを経ると、cocos2d-xのサンプルプロジェクトがOUYA上で実行できます。おめでとう!

コントローラーをcocos2d-xから利用しよう

せっかくOUYA上で自分のゲームが動いても、コントローラーが使えなくてはあまり嬉しくありません。というわけで、C++のコードからODKを参照して、OUYAのコントローラー状態を取得してみましょう。

JNI(Java Native Interface)

ここではJNIと呼ばれる仕組みを使います。これを使うことで、CとJavaの間で相互に資産を利用することができます。

今回は、JNIを用いて、ODKのAPIラッパーをC++で実装し、cocos2d-x上から呼び出してみます。

JNIはなかなか取っつきづらいのですが、下記を参照すれば書けると思います。

JNIコーディングメモ(Hishidama's Java native interface coding Memo)

以下にOuyaControllerをC++上で実装したものを置いておきます。

OUYA Development Kit (OuyaController) Wrapper for C++

使い方

例えばcocos2d-xで利用する場合、updateメソッド内で呼び出すと良いでしょう。

#include "OuyaController.h"

using namespace Kawaz::OUYA;

void MyScene::update(float dt) {
  // Get OuyaController Object of Player 1 (PlayerID = 0)
  OuyaController *controller = OuyaController::getControllerByPlayer(0);
  if (controller != NULL) { // if controller was found.
    float x = controller->getAxisValue(OuyaController::AXIS_LS_X); // X Axis value of Left Stick
    float y = controller->getAxisValue(OuyaController::AXIS_LS_Y); // Y Axis value of Right Stick
    bool o = controller->getButton(OuyaController::BUTTON_O); // get O button state.
    if (o) {
      CCLOG("Button O is pressed!");
    }
  }
}

サンプルコード

コントローラーでかわずたんを動かすサンプルを作成してみました。

giginet/cocos2dxOuya

以下のリポジトリをCOCOS2DX_HOMEに置き、Eclipseに追加すればうちの環境では動いていますが、他の環境では上記を参考に弄らないと動かない可能性があります。(未確認)

f:id:gigi-net:20130706222700j:plain

フルHDの画面上をかわずたんが縦横無尽に動き回る!

まとめ

自分の作ったゲームがテレビでフルHDで動くとやっぱりテンション上がりますね!

コントローラーで遊べるのも良いし、対戦ゲームなんかも作りやすそう。

しかし、触った感じ、残念ながらOUYAが流行る未来が全く見えません。せっかくゲーム作っても遊んで貰えないことが多そうですね。独占供給は辛そう。

第8世代ゲーム機OUYAが酷評!?「お金を払ってまで手に入れるものではない」 - koroのPSP改造

ウワサによると、iOS7から、GameControllerAPIが実装されるみたいなので、iOSAndroidへの移植を前提に開発するのであれば、OUYAに供給するのもアリなのかも。

Unity-OUYA楽しそう

UnityをOUYA対応するプラグインがあるようなので後日試して記事にしたいと思います。

Unity + OUYA

cocos2d-xのCCTMXTiledMapで表示が崩れた時の対処法

ストラテジーの開発を開始し、CCTMXTiledMapを使う用事があったので使っておりました。

エミュレータでは問題なかったのですが、実機では表示が崩れてしまって困った。


f:id:gigi-net:20130610030829p:plain
なんか黒い線が入る。


ググって見たところ

Disable antialiasing in CCTMXTiledMap | cocos2d for iPhone

    CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);

Projectionをデフォルトでは3Dの物になっているので2Dに変更

また、上記に加えてccConfig.hのCC_FIX_ARTIFACTS_BY_STRECHING_TEXELを1に変更すべし

#ifndef CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
#define CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL 1
#endif


cocos2d-xでも同様の設定で解決。めでたしめでたし。
f:id:gigi-net:20130610030832p:plain

ドキュメントにはCC_FIX_ARTIFACTS_BY_STRECHING_TEXELを有効にすると、ブロックノイズのようなモノを妨げることができます、と書いてあるけど、安易に変更してしまって問題ないのだろうか。


タイルマップの作成が非常に簡単で素晴らしいですな。CCScrollViewと組み合わせれば、ストラテジーゲームのひな形が一瞬でできてしまう。すごい。

音を奏でる奥スクロールRPG『VOXCHRONICLE -オクスクロニクル-』リリースしました

f:id:gigi-net:20130512145921p:plain

VOXCHRONICLE - gigi-net.net

去年の秋頃からチマチマ作っていたiPhone向け奥スクロールRPGVOXCHRONICLE -オクスクロニクル-』、ついに公開です!長かったー!

VOXCHRONICLE for iPhone, iPod touch, and iPad on the iTunes App Store

f:id:gigi-net:20130512161144p:plainf:id:gigi-net:20130512161149p:plainf:id:gigi-net:20130512161156p:plain

どんなゲーム?

行動と音楽が同期する奥スクロールRPGです。

主人公『オクス』が奥へと進み続けていくので、毎ターンコマンドを入力してオクスを安息の地まで導いてください。

一番の特徴は、プレイヤーの操作に同期し、リアルタイムに次々とメロディが紡がれていきます
1ターンが1小節に対応していて、ターンの長さは曲のBPMに依存します。

また、場の状況や盛り上がりを総合的に算出し、空気を読んだ曲展開になっていくのも特徴。


どんなゲームか一言で形容するのは難しいので、無料なのでとりあえず一度遊んでみてください。ここにしかない唯一無二のゲームだと自負しています。

外見は音ゲーRPGという皮を被っていますが、核の部分は硬派なレトロアーケード。しっかり遊びこまないと完全クリアは難しいバランスに仕上がりました。

初心者から上級者も納得の全9ステージ

前作(後述)は3ステージだったのに対し、今作はステージ分岐が付き、全9ステージに!

サクッとクリアできる初期ルートから、開発者でもうんうん唸る最難関ルートまで全4ルート!ステージによって曲も見た目もガラッと変わります。

f:id:gigi-net:20130512163448p:plain

f:id:gigi-net:20130512163548p:plain

豪華14曲

特筆すべきは豪華な作曲陣。プロ含めた音屋12名による書き下ろし14曲。インディーズゲームでは他に類を見ない物量を誇っています。

データ量としては前作は16小節3曲で48小節だったのに対し、今作は50小節前後の楽曲14曲で750小節以上!

この物量を感じ取って頂けますでしょうか。

個性的なボスたち

ステージの最後に待ち構えるボス達も個性的。守って、攻めて、キャラを切り替えて、多才な戦略が要求されます。

f:id:gigi-net:20130512163306p:plain

最後にはQTEでトドメの一撃。

f:id:gigi-net:20130512161201p:plain

充実のチュートリアル

前作はルールの説明を放棄していましたが、
今作は丁寧なチュートリアルを実装!遊びながらにしてルールを把握できます。

f:id:gigi-net:20130512160348p:plain

実績、モンスター図鑑、やり込み要素

GameCenterのAchievementに対応。さまざまなお題で何度も遊べる!

f:id:gigi-net:20130512163853p:plain

全54体の倒したモンスターが記録される『モンスター図鑑』、最速クリアを競うなどのやり込み要素も満載!

f:id:gigi-net:20130512163820p:plainf:id:gigi-net:20130512163847p:plain

前作『VOXQUEST』

このゲーム、実は昨年公開した『VOXQUEST』の続編となっております。


iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 VOXQUEST

音を奏でる奥スクロールRPG『VOXQUEST -オクスクエスト-』公開しました - 5.1さらうどん - 過去ログ

『VOXCHRONICLE』から入っても全く問題なく遊べるので、気に入ったらこちらもあわせてどうぞ

プレイ動画

全9ステージのうち、比較的簡単な荒野→森林→古城ルートのプレイ動画です。

最後は4つあるエンディングのうちの一つ。残りは君の目で確かめよう!

技術的な話

このゲームはcocos2d-xにて実装されていますが、音楽を自動生成する複雑な仕様を実装するために、なかなか面白い技術をたくさん取り入れています。

また、このブログでも何度も取り上げているLua-Bindingを用いた通称「オクスクリプト」によるレベルデザインを行っていたりします。

近々、細かな仕様と共に、別の記事にまとめたいなぁ、と考えておりますのでお待ちください!

ソースコード

なんとオープンソースです。ご興味のある方はぜひ!

(5/13追記 誤解を招きましたがCC-BY-NA-NDです。オープンソースと言うよりもソース公開が正しい)

gitのコミットログが1500近くに達していて、かなりの規模になってしまいました。

giginet/VOXCHRONICLE · GitHub

開発

札幌ゲーム制作者コミュニティKawaz


なかなか尖ったゲームに仕上がりましたが、ゲームの出来は自信アリ。いろんな人に遊んで貰えると嬉しいなぁ!