ただの適当な開発記

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

実機でのデバッグサポートアセット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でガンガン公開していこうと思っております

がんばるぞい

すた丼好きが集まるmastodonインスタンス「Maすた丼」を建てました

Mastodonの流行に乗ってみたよ

masutadon.com


APIでいろいろやってみたかったから建てただけなんですが、せっかくなんで趣味のすた丼でくくりました
今いる人は基本的に知り合いだけなんですが、誰でもどぞー

クライアントアプリを作っていく予定

「オセロ返し」を作りました

昨日は会社でゲームジャムがありました。
皆で集まって好きなゲーム作ろ〜的なイベントです。
弊社にはまったく仕事向きではない謎のお洒落空間があるのですが、そちらで朝の10時から集まりゴリゴリ開発をしておりました。

成果物

で、出来たのがこちら


オセロ返し_1

成果物発表会のときに参加者の前でこの動画を見せた所、「オセロやるのは必要なの?」という意見が多くでましたが、
絶対に必要です
様式美を大事にしていきたいのです。

アセット

今回使用したアセットはこちらです

オセロ盤とかオセロの駒とかは自前でなんとかなったんですが、手のモデルがどうしても欲しかったので購入しました。

申請

思えば最後にストアにゲームをリリースしたのは2016年の1月です。

play.google.com

2017年4月から社会人生活も4年目に入り、エンジニアとしての歴も4年目になります。
今年度は会社に属さない活動により一層力を入れていきたいので、個人で制作したアプリのリリースも積極的にしていきます。
手始めにこのクソゲーをリリースしようと思います笑

AppleもGooglePlayも両方共開発者ライセンスが切れているので、更新のお金を払わなければなりませんね。。
リリースの準備ができ次第ライセンスを更新して各ストアに申請します。

今後の方針みたいなのを書こうとしたら期せずして長ったらしくなりそうだったのでまた別の記事で書きます。
というわけで以上!

Inspector上の反復作業はなるべく減らし隊 ~Reset編~#Unity

UnityでInspector上で同じような操作を何回もするケースって結構あると思います。

個人的に最近一番多かったのが、
Trigger検知をしたいオブジェクトに対してColliderとRigidbodyをアタッチし、Collision判定と重力をオフる操作
です。

f:id:cocokyoro:20170320015749p:plain

こういうやつ。

これ毎回手作業でやってると、いつか絶対付け忘れたオブジェクトが出てきます。
で、それに気づかず実装して予期せぬオブジェクトが物理的な当たり判定を持っちゃってどっか飛んでく、といったバグが起こりうるわけです。

こういうのを起きないようにするためにPrefabがあるのでは?という意見もあると思いますが、作成したPrefabの抽象度によりけりだと思うので、今回はInspectorで操作せざるを得ない状況ということで。

Inspector上での反復作業を避けるには幾つか対応方法はあります。

そのうち自分がよく使うのはReset関数+RequireComponentでInspector上の設定をスクリプトからやってあげるというもの。


Resetの使い方例

RequireComponentで指定した型のComponentが自動でアタッチされます。

[RequireComponent(typeof(Collider))]

とやると下記のようなエラーがでます。

f:id:cocokyoro:20170321011018p:plain

Colliderじゃなくて継承先のColliderクラスを指定してあげましょう。

そして、ResetはGameObjectにスクリプトがアタッチされた瞬間に呼ばれます。
Resetの中で値を設定してあげればInspectorを直接いじる必要はありません。
Unity - スクリプトリファレンス: MonoBehaviour.Reset()

> Reset はインスペクターでデフォルト値を設定するときにもっともよく使用されます。

リファレンス的にもこの使い方を推奨しているようです。