ただの適当な開発記

会社勤めしつつUnityでアプリ作ってる人の雑記

MacOS SierraにあげたらKarabinerが効かなくなったやつ

3年ぶりにMacのOSアップデートをしました。
普段開発で使ってると極力安定して動く環境から変えたくないのでずーっと10.10 Yosemiteを使ってました。

pc-karuma.net

2014年の10月からずっと放置してたっぽい..

で今回会社のシステムの都合でアップデートした方がいいかも...ということになりアップデート(結果アップデートしなくてもよかったんだけども)

アップデートしたところ愛用していたKarabinerというキーマップ変更のアプリケーションが機能しなくなってしまった..

調べてみると解決策いっぱいでてきた

qiita.com

使ってる置き換えは右のCommandボタンをescapeに変更するというvim用のやつだけなのでKarabiner-Elementsを使って対応
元々入ってるKarabinerを消さないとKarabiner-Elementsの変更が反映されないかも

github.com

置き換えの処理の部分は中身はc++シェルスクリプトで書かれてるみたい。viewの部分はobjective-cで書かれてる。

c++objective-cの部分の連携ってどうやるんだろうって思ったら普通にできるらしい

ja.stackoverflow.com

Objecive-C++という見慣れないやつが。。

hajimehoshi.hatenablog.com

Objective-C++ は、プログラミング言語 Objective-CC++ とを多重継承したような言語です。
お互いの文法がかち合わないので、混在することができます。

はえー知らなんだ


というわけで話がそれてきたので終了

真偽値で2つのメソッドを呼び分ける

少しでもコードを短く書きたい人は下のようなコードを見た時どう思うのだろうか。

    public void PlayNext()
    {
        if (_isEndless)
        {
            PlayNextEndless();
        }
        else
        {
            PlayNextNormal();
        }
    }

どこかのstaticなクラスに以下のようなメソッドを書くと

 public static void CallByCondition(this bool condition, Action onTrue, Action onFalse)
    {
        if (condition)
        {
            if (onTrue != null) onTrue();
        }
        else
        {
            if(onFalse != null) onFalse();
        }
    }

もとのやつは以下の感じで表現できる

    public void PlayNext()
    {
        _isEndless.CallByCondition(PlayNextEndless,PlayNextNormal);
    }

こういう拡張に慣れると他のプロジェクトにジョインしたとき非常に困る。
かといって導入しようとすると多分嫌がられるという笑

DoTweenの拡張メソッド

今の座標を基準に指定した値を追加で動かす、というありそうでないメソッドを拡張で追加

DoTweenの拡張クラス

今の座標から右に100f動かすのを繰り返したい!とかはこのメソッド使うとシンプルにできますね

DoTweenは無料ですよん ;)

実機でのデバッグサポートアセットSRDebugger使ってみた #Unity #AssetStore

最近プロジェクトで使い始めたアセットがとても便利なので紹介したいと思います。

SRDebuggerとは

こちらのSRDebuggerです。

こちらは実機でのデバッグをサポートしてくれるアセットですが、使える機能がとにかくリッチ。

  • 実機でのログ確認(Debug.Log系の出力確認)
  • 実機でのプロファイラー表示
  • 使用している端末のスペック表示
  • コード上で属性をつけた変数を実機上でいじれるようになる

こんなことができちゃいます。

実際の開発現場でもこのアセットの存在を知らずにこれに該当する機能を作ろうとしているプロジェクトは多いのではないでしょうか。
かくいう自分も会社で同じような機能を実装しようとしていたところに、前のプロジェクトで一緒だったエンジニアの先輩が教えてくれて知りました。笑

起動方法

デバッグメニューはこんな感じで画面の左上をタップすると起動します。

f:id:cocokyoro:20170530235059g:plain

このデバッグメニューを有効化するために何かを事前にやる必要はありません。
シーンにprefabを置くとか、事前にコードを置くとかは必要ないです。
これをどういう仕組でやっているかは後日別の記事で書きます。笑

機能一覧

上で取り上げた各機能について一つ一つ見ていきます。

実機でのログ確認

f:id:cocokyoro:20170531002019p:plain

こんな感じでDebug.Log,Debug.LogWarning,Debug.LogErrorで出力した文字列は実機上で見れます。

f:id:cocokyoro:20170531002045p:plain

上の3色のボタンのオンオフを切り替えればログレベルでの出し分けも簡単にできちゃいます

f:id:cocokyoro:20170531002114p:plain

文字列を入力してのフィルタリングも対応

f:id:cocokyoro:20170531002128p:plain

上の方にあるピンボタンを有効にするとデバッグウインドウを閉じてもログが見れます

実機でのプロファイラー表示

f:id:cocokyoro:20170531002803p:plain
こんな感じでUnityEditor上のProfilerと同じような情報が実機上で見れてしまいます
見れる項目はUpdate,Render,Otherの3つ、流石にEditorのProfilerよりは項目は少ないですが、実機上でこの項目が見れるのはありがたい

使用している端末のスペック表示

f:id:cocokyoro:20170531005443p:plain

こんな感じで端末のスペックが見れます。
うつってるのは愛用のKindleFireのスペックです

コード上で属性をつけた変数を実機上でいじれるようになる

こんなコードを書いてみます

※partialクラスである点に注意

using System.ComponentModel;
using UnityEngine;

public partial class SROptions {

	private float _sampleProperty1 = 0.5f;
	private float _sampleProperty2 = 0f;
	private float _sampleProperty3 = 0f;
	
        //プロパティをいじれるようにするための属性
	[Category("Sample Category1")] 
	public float SampleProperty1 {
		get { return _sampleProperty1; }
		set { _sampleProperty1 = value; }
	}
	
        //Rangeも指定できます
	[NumberRange(0,10)]
	[Category("Sample Category2")] 
	public float SamplePropert2 {
		get { return _sampleProperty2; }
		set { _sampleProperty2 = value; }
	}

        //同カテゴリ内に複数のプロパティをセットすることもできます	
	[NumberRange(0,10)]
	[Category("Sample Category2")] 
	public float SamplePropert3 {
		get { return _sampleProperty3; }
		set { _sampleProperty3 = value; }
	}
	
        //メソッドも簡単に呼べちゃいます
	[Category("Sample Method")] 
	public void SampleMethod() {
		Debug.Log("こりゃ便利だ");
	}
}

これで実行してデバッグウインドウを開き、"Options"の項目を開くと...

f:id:cocokyoro:20170531010952p:plain

すばらしい....

チームで開発していると「この項目を気軽にいじれるようにして欲しい」とか「あの処理いつでも呼べるようにしてよ」とかそういった要望が出てくるわけですが、この機能があれば対応できちゃいます。

まとめ

SRDebuggerは非常に高機能なデバッグサポートツールです。
もし、独自にこういったデバッグ機能を実装しようとしている場合は、一度導入して試してみることをおすすめします。

そんなわけで今日は以上です。

basement cafe(@神泉)に行ってきました

昨日は神泉のbasement cafeというところで作業してました

CO-WORKING SPACE CAFE

地下にあるお店で、地上の入り口の前をよく通っていたので気になっていた店でした。

f:id:cocokyoro:20170506000047j:plain

4月末にオープンしたばかりで、この日はほぼ貸し切り状態でした

作業スペースはカウンターと大きいデスクの複数ありました。
f:id:cocokyoro:20170506000232j:plain

勉強会のようなイベントで使えそうなスペースもありました。
f:id:cocokyoro:20170506000226j:plain


洗面所?にマウスウォッシュやらマスクやら綿棒やらがあるのか地味に嬉しかったです
f:id:cocokyoro:20170506000055j:plain


この日はここで1日もくもくと作業..
.NET Coreの使い方を学びながらMastodonアプリを手探りで作ってました。

ここはまた来たい!

下北沢オープンソースCafeにいってきました

本日は午前中に下北沢で用事がありまして、その足で下北沢のコワーキングスペースに行ってまいりました。
下北沢オープンソースCafe、というところです。

www.osscafe.net


オープンな感じの入り口
風車が回ってました
f:id:cocokyoro:20170503225214j:plain

中はオープンなカフェスペースと作業スペースに分かれていました
カフェスペースは皆でワイワイ、作業スペースは黙々と集中、といった感じでした。

作業スペースにある本棚には技術書がぎっしり\(^o^)/
Unity関連のもたくさんありました
f:id:cocokyoro:20170503225223j:plain

写真はそんなに撮ってないんですが、とても居心地のいいカフェでゆっくり作業に集中できました!
また下北沢にいったらお邪魔します。

今日はMastodonのクライアントアプリを作ってました。
.NET Coreを使って作ってるんですが、普段Unityばかり触っているためawait asyncとかが分からずそこから勉強って感じでした(;´Д`)
このGWで作りきれればいいな〜

2016年12月~2017年4月のアセット売上

アセットストアの売上について半年ぶりに更新です

どどん

f:id:cocokyoro:20170503213948p:plain

こんな感じであります。
今年の3月が結構売れたんですね。

そろそろUnity5.6の対応をしていかなきゃならんですね。

今の自分のレベルで作れるツールをアセットストアに公開してもお小遣い程度にしかならないのがわかったので、今後は作成したツールはgithubでガンガン公開していこうと思っております

がんばるぞい