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