2011-11-22

iOSシミュレータでの画像保存

Titanium Mobile (1.7.5)経由で Ti.Media.saveToPhotoGalleryを実行するとエラーがかえってくる(errorのcallbackハンドラがよばれる)
内部で結局はUIImageWriteToSavedPhotosAlbumが呼ばれる。
よくよく調べてみると、
シミュレータ上で写真機能を一度は実行しておかないと保存用のディレクトリが作成されないらしく、そのせいでエラーになる。
(Safariの横の写真アプリをクリックすればおk)

やられたわ。

2011-11-21

Titanium Mobile (1.7.5)のtableviewsection - iOS

Titanium Mobile (1.7.5)のtableviewsection

ボタンを押すなどのイベント時に、tableview上のあるセクションのすべての行の値を取得する必要があったので、APIを見たところ、rowに対するアクセサがない。
(あるのはrowCountという件数取得のみ)

しかしながら、githubにあるソース(TiUITableViewSectionProxy.h)を見るとしっかり、rowsがプロパティとして宣言されている。

var row = aTableviewSection.rows[i];

とやったら、取得できた。APIへの記載漏れなのかな。


2011-11-15

Titanium Mobile(1.7.5)でのcookie - iOS

Titanium Mobileでcookieについてのメモ書き(for iOS)

・SDK 1.7.5での挙動。
・サーバから発行されたcookieはURL(のホスト部)をキーにNSHTTPCookieStorageに保存される。
・このcookieを消したい場合、xhr.clearCookies("http://foo.bar.jp/");とやれば消せる
・clearCookiesメソッドは今のところAPIリファレンスには載っていない。
・有効なcookieがNSHTTPCookieStorageにある場合、自動でリクエストに付与される(未確認)
・そのため、「有効なcookieがリクエストにある場合、cookie発行しねーよ」というサーバだった場合、this.getResponseHeader('Set-Cookie');は2回目以降nullになる可能性がある。

2011-10-30

Unity3Dで作ったゲームにAdMobを表示する方法(iOS編)

忘れないうちにメモ書き

現時点ではAdmobSDKの仕様上、ViewControllerが必要になるので、
UnityでbuildしたxcodeプロジェクトのAppController.mmにコードを追加する。

Step1
-(void)registerAdmobなどとして、admobの表示ロジックをメソッドとして追加する

Step2
applicationDidFinishLaunchingの最後に、Step1で作ったメソッドをdelayさせて呼び出す。


以下はlandscapeLeft固定で右上に320x50のバナーを表示する場合。 以下をapplicationDidFinishLaunchingメソッドの最後に追加。
[self performSelector:@selector(registerAdmob) withObject:nil afterDelay:0.4];

2011-10-29

個人でのUnity3Dについて

Unity3D でiOS/Android向けゲームをリリースできたのでまとめ

将来どうかわっているかわからないが、現時点での所感。

・Unity3D自体は本当にすばらしい。
・モバイル向けにはライセンスが必要だが、400$は安いと思う。
・行列の演算が必要になってくるが、数学が好きなら苦にならない。
・サンプルなどでだいたいパターンが見えてくるので、3D空間の計算方法がわかるようになる。
・OpenGLかける人はすらすらできると思う。
・MonoでC#を書く時間より、Blenderで3Dモデルを作る時間のほうが長かった。
・リアルタイムのLightの計算がコストが高い。(ので、mobile/Unlitを使った)
・Lightmappingもパフォーマンスに有効。
・実機に転送して、FPSを表示させながらやると捗る
・ワンソースでiOS/Androidへビルドできるが、Switch Platformすると、コンバートがかかるので、これが結構長い。アセットが増えてきた後半は特に。
・最初は1つのプラットフォームで開発し、できてからswitchしたほうが効率はいいと思う。
・3Dモデリングとそれに正しくテクスチャを貼れる人は神だと思う。
・容量を気にしないで作ったら、20MBを余裕で超えたので、次回への反省材料

The Tower Of Maze  AppStore  Now.
I could release The Tower Of Maze for iOS
It is supported for iPhone3GS/iPhone4/4S
And it is free.

2011-10-18

Unity3DとOpenFeintの連携メモ(Android)

TowerOfMazeでUnity3DとOpenFeintを連携させたときのメモ-Android編。

Step1
Unity用のEclipseでの環境を整える。Indigoでもだいじょうぶ。
@ITのgreeの方の書かれた記事を見るか、もしくはUnityの公式ドキュメント(Integrate Eclipseなんちゃら)に従い、Eclipseでの環境を整える。
この段階では、単純に
・UnityPlayerActivity(2.3以上向けならProxyActivity)を継承したクラスを作成
・BuildされたTemp/ほにゃらら/assets/以下をEclipseプロジェクトのassetsにコピー
・Eclipseから実機を起動する(Unity上でのBuild and Runは使用しない)
を確認する。
なお、Temp以下はUnityでplatformをAndroidにして、一度ビルドしないと出現しないので注意。

Step2
次にOpenFentのSDKを参照できるようにする。jarでは提供されていない?ので、プロジェクトをインポートする
・OpenFeintのAndroid用SDKをダウンロードし、OpenFeintAPIのプロジェクトをimportする。
・プロジェクトを右クリックし、Androidを選んでis Libraryにチェックを入れる
(最初から入ってるかも)
・Step1で作成したプロジェクトを右クリックし、Configure Build Pathを選択
・左メニューからAndroidを選んでLibraryのAddを選択し、OpenFeint APIを追加する。
(UnityPlayerの環境を整えるのと同じやり方)

Step3
Eclipseでクラスを用意する。OpenFeintPluginなどとする。このクラスをUnity側から呼び出す形になる。メソッドはすべてstaticにする。最初はLaunchDashbordだけとかがいいでしょう。(OpenFeint側の公開メソッドはほとんどstaticで実装されている。)

Step4
Unity側でクラスを書く。Assets/Plugins/Android以下におくのが望ましい。
AndroidJavaClassを使用するので、もし同じソースでiOSなど別のPlatformでBuildする場合は当然エラーになるので、クラス全体を
#if UNITY_ANDROID
#endif
で括る。また、Unity上でPlayしたときに、スルーするように
Application.isEditor を使って分岐する。

以下Step3とStep4を繰り返し、Eclipse側でコードを追加し、それをUnity側で
AndroidJavaClassを使って呼び出す。

おまけ
OpenFeintで何かイベントが発生した場合に(ログインしたとか)なにかしたい場合は
自分でOpenFeintDelegateを継承したDelegateクラスを書き、
OpenFeint.initializeの第3引数にそのインスタンスを渡せばよい。

OpenFeint.initialize(currentActivity, settings, new MyOpenFeintDelegate());



2011-10-17

The Tower Of Maze

The Tower Of Maze  released.
I am excited that I can release The Tower Of Maze.
At present, this game is designed for Android (required >= 2.2).
I am going to prepare for iOS.

This game is developed by Unity3D Game Engine.
Unity3D is great development tools for indie developers like me.

If you'd like to contact me, please email  to ozahei at gmail.com
(at replace @)