OUYAって何?
意外と知らない人が多いようで、OUYA買ったよー!と言っても反応してくれる人がそこまで多くなかったので、簡単に説明しておきます。
OUYAは6月末に発売されたAndroid搭載の家庭用ゲーム機で、以下のような特徴があります。
- Android4.1.2搭載
- 安価(コントローラー込みで$99)
- ルービックキューブサイズ
- ハック可能(開発ツールが公開されていてゲーム開発が容易)
- Free to Play(全てのゲームが無料提供。コンテンツ課金が中心)
- HDMI, Bluetooth, USBなど拡張性が高い
プレイヤーは無料でゲームが遊べ、開発者にとっては、開発環境を選ばない、HD出力可能、規格化されたコントローラーが利用可能、無料と、非常に開発のしやすいプラットフォームになっています。
ファーストインプレッション
期待度大のオープンソースゲーム機「 OUYA ( ウーヤー )」を試してみた 【@maskin】 | TechWave
詳しくは上記の記事を読むといいと思います。
ちなみに、モノによるそうですが、僕が購入したものは、プラグが日本の物に対応していないロットだったようで、別途変換コネクタの購入が必要になります。
ACアダプターを見たところ、電圧は100Vに対応しているので、プラグの変換だけでOK。
また、地味に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の開発環境については、ググればいくらでも出てくるので以下の記事をご参照ください。
OUYA実行環境の構築
docs/setup.md at master · ouya/docs
こちらにOUYA開発環境の構築方法が載ってます。
一応動画が付いているのですが、解像度低すぎで何やってるかサッパリなので、要点だけ書きます。(Macでの構築方法。Windowsの方は上記記事参照のこと)
USB Vendor IDの登録。
echo "0x2836" >> ~/.android/adb_usb.ini adb kill-server adb devices
この手順を踏むことで、OUYAがAndroid端末として認識され、実機実行が可能になります。
サンプルアプリを動かしてみよう
OUYA Development Kit(ODK)の導入
OUYAの開発キットを導入します。
こちらのサイトからダウンロードしましょう。ざっくり見た感じ、以下のような機能が使えるようです。
- ゲームコントローラー
- ストレージ(セーブデータ)
- アプリ内課金
- ユーザー認証
この中にサンプルプロジェクトが3つ含まれているので動かしてみましょう
- Eclipseを起動し、File > New > Other > Android Project from Existing Code.を選択
- OUYA-ODK/Sample/から実行したいフォルダを選択して追加
- プロジェクトツリーで右クリックし、Run AS > Android Application
- Deviceでouya-ouya_consoleを選択
今までの手順が上手くいっていれば、実行可能なデバイスにOUYAが表示されているはずです。
例えば、game-sampleを実行すると、ATARI時代に戻ったかのような、目に痛い全方位シューティングが起動します。
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のダウンロード
ダウンロードしましょう。今回は2.1.4で検証。
また、解凍したディレクトリのパスをCOCOS2DX_HOMEとして環境変数にしましょう
launchctl setenv COCOS2DX_HOME /path/to/cocos2d-x-2.1.4
プロジェクトの作成
解凍したディレクトリにあるcreate_android_project.shを走らせましょう。対話環境が立ち上がるので、以下の項目を順に入力してください
- パッケージ名(ここではorg.kawaz.ouya)
- ターゲット番号(表示されている一覧から、2.1.4を示すIDを入力してください)
- プロジェクト名(ここではHelloOUYA)
ビルド
COCOS2DX_HOMEに今作成したプロジェクトのフォルダができているので、proj.android以下にあるbuild_native.shを実行してください
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++上で実装したものを置いておきます。
使い方
例えば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!"); } } }
サンプルコード
コントローラーでかわずたんを動かすサンプルを作成してみました。
以下のリポジトリをCOCOS2DX_HOMEに置き、Eclipseに追加すればうちの環境では動いていますが、他の環境では上記を参考に弄らないと動かない可能性があります。(未確認)
フルHDの画面上をかわずたんが縦横無尽に動き回る!
まとめ
自分の作ったゲームがテレビでフルHDで動くとやっぱりテンション上がりますね!
コントローラーで遊べるのも良いし、対戦ゲームなんかも作りやすそう。
しかし、触った感じ、残念ながらOUYAが流行る未来が全く見えません。せっかくゲーム作っても遊んで貰えないことが多そうですね。独占供給は辛そう。
第8世代ゲーム機OUYAが酷評!?「お金を払ってまで手に入れるものではない」 - koroのPSP改造
ウワサによると、iOS7から、GameControllerAPIが実装されるみたいなので、iOSとAndroidへの移植を前提に開発するのであれば、OUYAに供給するのもアリなのかも。