unity study

Unityでサクッとモックを作れるようになることを目指して、基本的なテクニックを抑えていく過程を残すブログのつもりだったけど、今はただ自分のトラブルシューティングメモになってるブログ

Android版のビルド時に出たエラー

どうにもAndroidManifest.xml周りで、よく分かっていないがためにビルドエラーにハマる。
とりあえずさっき、下記の方法で一つの問題は解決したのでメモ。
stackoverflow.com
Assets/Plugins/Android/res/values/version.xml を置くって話なんぞ知らんがな。
それとも本来は別の方法で解決すべき問題なのか?

XCode6から7にした時のトラブル対応メモ

XCode7にしてバイナリをiTunesConnectにアップロードしようとした際に、幾つかトラブルがあったのでどう対応したかメモを残す。
と言っても、解決した情報へのリンクだけど。

続きを読む

Unity5でGameCenterの達成項目を解除できないバグ対応

どうやらUnity5から、5.2.1時点でもまだ解決されていないバグらしい。hwks.hatenadiary.jp
とりあえず下記に従ってネイティブプラグインで解決するか。qiita.com
ところで、アプリバージョンアップタイミングから達成項目を追加する場合のテスト方法が分からない。
iTunesConnectで達成項目を追加して、Sandbox環境へログインしてもGameCenterの画面に表示されず。
LeaderBoardも同様。
ただ、どういうタイミングかは分からないのだが、ログイン/ログアウト繰り返したりしながら色々確認していたら一度だけ表示されたことがあった。
今はまた表示されない状態になってしまっていて困ったままだ。

Debug.Log()はかなり重いよ

ちゃんと計測してないんだけど、毎フレームあちこちでログ出力してるとかなりフレーム落ちる。
書き換えて周るのも面倒だなーと色々調べてたら、Debugクラスをグローバルスコープで定義して、単にDebugと書いている場合にUnityEngine.Debugではなく、自分の定義したDebugが通るようにする方法があるらしいことを発見。
なるほど、これだと既存のコードに手をつけなくて済むし良いな。
実機でチェックしてみたら劇的に動作が軽くなった。
めでたしめでたし

リリースビルド時にデバッグログ出力をしないようにするためのラッパー

Application.LoadLevel()でのエラーハンドリング

ステージ毎にシーンを分けて作っていて、そのシーンを

Application.LoadLevel("Stage" + n);

って感じで読み込んでいる。
何らかのミスでそのシーンが存在しない場合はエラーになるが、調べた感じだとうまいエラーハンドリングが見当たらない。
Exceptionをcatchできるわけでもないし、そもそもそのシーンが存在しているかどうかを調べる方法もないっぽい?
どうしたもんかなー、とぼんやり考えていて、結局こうすることにした。

IDisposable timer;

void Load()
{
    Application.LoadLevelAsync("Stage" + n);
    // x秒以内に読み込み完了しないということは、存在しないと判断する
    timer = Observable.Timer(TimeSpan.FromSeconds(x))
        .Subscribe(_ => {
            // エラーハンドリング処理
        });
}

// 読み込み先シーンから叩かせるメソッド
void OnLoaded()
{
    timer.Dispose();
}

タイマーの部分は別にコルーチンでも何でも。

Web上で効果音を作れるサイト

http://jfxr.frozenfractal.com/#
マシンによってはちょっと重いけど、これはなかなか使い勝手が良い。

UniRxメモ:ストリームが発火した回数を調べる

あるタイミングで発火するstreamがあるとして、

stream.Select(_ => 1)
    .Scan((a, b) => a + b)
    .Subscribe(x => Debug.Log(x));

とすると発火した回数を取れる。