Unityで作ったアンドロイドアプリが吐くログを確認する方法

Android SDKへのパス/platform-tools

にあるadbというコマンドを使うことでログを見ることができます。


Android SDKへのパスは、Android Studioを立ち上げて、「Android Studio」->「Preference」->「Android SDK」として、上の方にあるAndroid SDK Locationというところに書かれています。

f:id:wkpn:20170116202059p:plain

自分の場合は、.bash_profileに

export PATH=/Android SDKへのパス/platform-tools:$PATH

を追記して使っています。パスを通した後、

adb logcat

でログを見られます。しかしこれだと、実機側から吐き出されるありとあらゆるログが見えてしまいます。

adb logcat | grep Unity

とすることで、Unityで作ったアプリの吐くログのみを見ることができます。

【追記】

/Library/Android/sdk/tools/monitor
を使うとGUIで見られる。
最初Deviceが認識されなくて見られなかったけど、monitor立ち上げてからDeviceを接続し直したらいけた。

typeface animatorとoutlineの併用で、ちょっとハマった

Typeface Animatorという超絶簡単にオシャレにテキストを動かせるAssetがあります。

https://www.assetstore.unity3d.com/en/#!/content/37445

先日、こちらのアセットとOutlineコンポーネントと一緒に使ってたらうまく動かなくてハマったのでメモ。

どういうふうになっていたかというと下のような感じにアニメーションしてしまう。

f:id:wkpn:20170208204245g:plain

本当は↓のようになって欲しい。

f:id:wkpn:20170208204314g:plain

これはコンポーネントの順番を入れ替えれば良いだけでした。

f:id:wkpn:20170208204352p:plain
Outline
Typeface Animator
の順になっていたのを...

f:id:wkpn:20170208204404p:plain
Typeface Animator
Outline
の順にすればOK

ちなみに、Shadowコンポーネントでも同じようなことが起きるようです。

CosやSinをテーブル引きにする効果

      • -

追記 2017/2/8 23:20

各所からツッコミを受けました。
テーブル引きの恩恵を受けるようなコードは、現在の実践環境ではあまりなく、普通に関数を使ったほうが有利というのが説が多いです。
以下のテストはキャッシュが効きやすい状態のテストなので一応、テーブル引きが勝っていますが、結構特殊な状況です。
ほんとうは、ちゃんと実際のゲーム中で計測するべきなんですけど、すいませんm(_ _)m

速度的なメリットは怪しいけどテーブル引きのメリットは、
通信量を落とせるとか(角度をfloatの32bitじゃなく8bitとか16bitで持ちたいとき)
値が実行環境に依存しないとか
というメリットがあると言われ、自分も納得しました。

      • -


CosやSinをテーブル引きにする効果

ゲーム制作において、高速化のためにCosやSinといった関数をテーブル引きにするというのは、よくある話である。

自分のゲーム制作環境でも少しでも処理を軽くするためにテーブル引きSin,Cosを作ってみようかと思ったのだけれど、そもそもどれぐらい処理の高速化が見込めるのか、Unity上で試してみた。

github.com

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour {
    public int loopCount = 10000000;
    System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();

    public int tableSize = 360;
    public const float PI2 = Mathf.PI * 2.0f;
    float[] cosTable;

	void Start () {
        cosTable = new float[ tableSize ];
        for( int i = 0; i < tableSize; ++i )
        {
            float theta = (float)i / tableSize * PI2;
            cosTable[i] = Mathf.Cos( theta );
        }
    }

    [ContextMenu("Test Mathf")]
	void TestMathf () {
        stopWatch.Reset();
        stopWatch.Start();
        float sum = 0.0f;
        for( int i = 0; i < loopCount; ++i )
        {
            sum += Mathf.Cos( (float)i );
        }
		
        stopWatch.Stop();
        Debug.Log( "time : " + stopWatch.Elapsed + " sum, " + sum );
	}

    [ContextMenu("Test Cos Table")]
	void TestCosTable () {
        stopWatch.Reset();
        stopWatch.Start();
        float sum = 0.0f;
        for( int i = 0; i < loopCount; ++i )
        {
            sum += getCosFromTable( (float)i );
        }
        stopWatch.Stop();
        Debug.Log( "time : " + stopWatch.Elapsed + " sum, " + sum );
	}

	int getCosTableIndex ( float theta ) {
        return (int)( theta / PI2 * tableSize ) % tableSize;
    }

	float getCosFromTable ( float theta ) {
        int index = getCosTableIndex( theta );
        return cosTable[ index ];
    }
}


1000万回、Cosを計算して加算した結果、自分のMacbook Pro上で、Mathf.Cosは0.552秒、tableを使ったCosは0.453秒とTableを使ったほうが20%ぐらい高速だった。

もっと差が出るかと思っていたのだけど、そうでもなかった。

tableを使った方は精度がイマイチなのでご利用は計画的に。

UnityException: Unable to install APK! Installation failed. See the Console for details

UnityでAndroid版をBuild And Run しようとした時に、突如として表題の例外が発生するようになって困った。

answers.unity3d.com

こちらに解決策が↑

Player Settings -> Other Settingsで、Bundle Version Codeをあげたらインストールできた。

たまにUnityが落ちて、意図せずBundle Version Codeが下がっていることがあるので注意。

use of undeclared identifier 'Unity' とか 'UI' のエラー

UnityでiOS版のビルド時に、Scripting BackendをMono2xにしてStriping Levelを何某かにしていると、以下のようにXCode側でエラーが出ることがあるもよう。

f:id:wkpn:20170116200832p:plain

とりあえずstripping levelをdisabledにすれば、一応回避できる。

Mono2xでのビルドは、基本デバッグ用途でしか無いので、とりあえずこれで良いかな。

XCodeでビルドした時に「Appの有効なaps-environmentエンタイトルメント文字列が見つかりません」というエラーが出る

XCodeでビルドした時に「Appの有効なaps-environmentエンタイトルメント文字列が見つかりません」というエラーが出た。

これは証明書にPush Notificationが無いかららしい。

最近のXCodeは「Automatically manage signing」にチェックを入れておくと証明書を勝手に作ってくれるので、Capabilityの設定部分でPush Notification項目をONにすれば勝手に証明書側も更新してくれる。

f:id:wkpn:20170116200204p:plain

2017年、Vim周り見直し

半年に1回は見直しています。今回は結局大して変えませんでした。

世間では、Neovimに乗り換えましたとか、プラグイン管理をdein.vimに乗り換えましたという人が多いようですが、自分はNeovimは、まだ不安があるのと、そんなにメリットが分かっていないので、もうちょい様子見。
結局 最新のKaoriya版MacVimに。

dein.vimも設定ファイルを書き換えるのがめんどくさいのと、Neobundleでも速度に満足しているので、今回は見送り。

継続して使用するプラグイン

Neobundle

プラグイン管理。dein.vimへの移行が推奨されていますが現状に満足しているのでそのまま。
半年後に再検討予定。

unite

インクリメンタルサーチで色々探して、色々出来る

unite help

全ヘルプ内をインクリメンタルサーチで探せて便利

machit

括弧の上で%を押すと対応する反対側の括弧に飛べるけど、それをいろんなものに拡張してくれる。
begin,endとか、とか。

vim-indent-guides

インデントに色を付けて見やすくする

vim-quickrun

コードをすぐに実行して確認

neco-look

lookを使って英単語保管機能

vim-bufonly

BufOnlyで自分以外のbufferを削除する

syntastic

syntax checkプラグイン

neosnippet.vim, neosnippet-snippets

スニペットプラグイン。あまり使いこなせていない。

vimfiler

ファイラープラグイン。あまり使いこなせていない。

Omnisharp, vim-dispatch

C#でインテリセンスを効かせるために。

vim-csharp

C#シンタックスハイライト

lightline

挿入モード、ヴぃジュアルモードなどのモードが見やすくなる

vim-easy-align

コード整形プラグイン

vim-textobj-indent, vim-textobj-user,

インデントが揃っている部分をテキストオブジェクトにしてくれる

vim-commentary

コメントアウトしたりコメントインしたりを簡単に

今回から入れてみたプラグイン

vim-colors-solarized

カラースキームsolarized。長いことdesertで固定されていたので、ちょっと気分を変えてみることに。

vim-endwise

Ruby向けにendを自動挿入してくれる。しかしRubyのコードを描く頻度は少ない。

vim-monster

Ruby用の補完。しかしRubyのコードを描く頻度は少ない。

ruby_hl_lvar

Ruby用のローカル変数ハイライト。しかしRubyのコードを描く頻度は少ない。

vim-closetag

tagを閉じてくれる

vim-gitgutter

Git管理下のファイルをVim上で変更内容を確認する

vim-fugitive

VimからGitを使いやすくしてくれる

vim-quickhl

一度に複数の検索結果をそれぞれ異なる色でハイライトできる

yankround

ペースト時にyankの履歴を辿れる

使用を停止、もしくは一時停止するプラグイン

vim-trailing-whitespace

行末にあるスペースを可視化してくれる。
見えると、消したくなる。そして消すのがあまりにめんどくさいので、使わないことに。

unite-mark

マークした箇所をUniteで探して飛べる
結局、マークをあんまり使わなかった

vimshell

VimからShellを起動するスクリプト
結局、あんまり使わなかった

vim-visualstar

ビジュアルモードで選択して、*を押したときに選択した内容で検索をできる。
結局、あんまり使わなかった

vim-ref

vimで辞書をみるプラグイン
結局、あんまり使わなかった

vim-surround

テキストを囲むことに特化したプラグイン シングルクオートとダブルクオートの入れ替えなど
結局、あんまり使わなかった

onedark

AtomのOne Darkを再現するためのカラースキーマ
c#ではイマイチな気が...

AnsiEsc.vim

ログファイルを色づけしてくれる
結局、あんまり使わなかった

ctrlp

yankroundと一緒に使うことでyankの履歴を表示して選択して、ペーストってできる。
自分の環境では何故かうまく動作しなかったのと、Unite yank で良いかなぁと。

vim-processing

processingとvimを連携するプラグイン。もうprocessingを使うことは、ほぼほぼないだろうということで。