GraphMaker使ってみた

Unityでグラフを描こうとしたが、折れ線グラフを作ってる最中で心が折れた。 AssetStoreでより素晴らしい感じのものを見つけてしまったのだ。

Asset Store

というわけで、使って見た感想。

軸の種類

いきなり躓いた。 Y軸を2種類設定する事が出来ない。 良くある、棒グラフと折れ線グラフの組み合わせだ。相関関係があるが、しかし数値としては単位が違う様なグラフをまとめる時に使う。天気予報とかで言うなら、降水量と湿度をまとめたグラフとか。 左と右、両方にそれぞれ単位がある。 天気予報の例で言うなら、左が降水量、右が湿度。 湿度は0%~100%だが、降水量は場合によっては最大100mmには収まらないだろう。というか、%とmmでそもそも単位が違うので、やはり軸は両側に必要だ。

しかし、GraphMakerはそれを想定していない。 というわけで、僕が取った対策は「グラフの背景を透過させて、二つのグラフを重ねる」という至極単純な方法。 これの難点は、選択によるツールチップの表示が出来ない事だ。 あと、凡例をまとめる事が出来なくなる。

まあ、凡例は後で別に作って付け足せば良いが、ツールチップは悩ましい問題だ。無いと困るというものではないが……。選択時、背後のオブジェクトのイベントまで発火させる事が出来ればいいのだが、軽く調べたが中々そういった方法はない。そもそも、Unityに標準のUIフレームワークが備わったのは割と最近の様で、あまりこれに関する記事を見つけられない。しかも、標準フレームワークが出来る以前はAssetによる拡張フレームワークとしての実装もあった様で、未だに利用者が2分されている様だ。

それはさておき。 もう一つの方法は、ソースも提供されているので改造して軸を追加する、という方法。大変そうなのでまだ試していないが……。

Unityのデバッグで困るのは、画面上の描画にブレークポイントをかける事が出来ない事だ。例えば、おかしなラインが描画されたとして、そのラインが描画される瞬間はコードの中から探さなければいけない。 こういう辺り、Unityに慣れてる人はどうしてるんだろ……。

さて、あとはちくちくと感想やら使い方やら、本記事を更新していこうと思う。

ヒエラルキービューの親子関係

Unityのヒエラルキーは、何も考えずにオブジェクトを追加しまくっていくとゴチャゴチャになる。

というわけで、フォルダ的なものを用意して親子関係を作って整理するわけだが……。ネットで情報を調べると、EmptyObjectを使って親子関係を作れ、とある。しかし、ここにも落とし穴。

多分、普通のゲームとかを作る分には問題無いのだと思う。が、UIオブジェクトでメニュー的なものを使っている所でこの活用をすると、なんとアンカーが全部外れる上に、設定も不可能になる。

というわけで、UIのPanelオブジェクトを使った方が良い様に思う。うん。絶対とは言わないけど。良いんじゃないかな。多分。きっと。まあ、僕は初心者なので。と逃げてみる。

ちなみに、親子関係にしてもゲームオブジェクト間でアンカーが継承したりはしないので、アンカーは全部設定してあげた方がよさげ。

UnityでのLINQでハマった所

Unityでも普通にLINQ(多少の不具合はあるらしい)が使える、って聞いていたので、使って見たら、ハマった所があったのでメモ。確認でさくっとコレクション(Enumerable.Rangeで生成)を作って、ウォッチにコレクションのFirstを取る式を突っ込んでみたら……

「Failed to find a match for first()」

となってウォッチでエラーが出る。しかし、普通に実行しても例外は出ない。色々調べていたら、ウォッチ式にLINQを突っ込むとエラーになるが、コード上は正常に動作する、という事が判明。ややこしい……。

PGA iPhone 6s 保護フィルム

www.amazon.co.jp

使ってみた。

曲面へのフィット感はばっちり。問題は特に無し。ただねー。貼るのが非常に面倒くさかった。

最近の保護フィルムは貼り付け方にもかなり工夫があるけれど、この製品は本当にそのまんま。しかも、端っこが曲面になってるから、間違えるとなんかちょっとアレだしね。ただ、ちゃんと貼り付け出来たらフィット感はある。しかし、エッジの部分が加工されておらず、しかもフィルム自体少々厚みがあるので、感触は良くない。

そしてさらに、あちらが立てばこちらが立たず。フィルムの透明度が酷い。画面が明らかにぼやける。うーん、ちょっと勘弁して欲しい。ちょっと今時のフィルムとは思えないぐらい悪い。

しかしまあ、僕はiPhoneの画質にそこまで多くを求めるつもりはないので、とりあえずこれを使っていこうと思う。曲面にジャストフィットする製品が他にどのぐらいあるかわからないし。

そして、この製品に限る話ではないのだけど。

フィルムの画面周りが黒くなってるの、最初は意味がわからなかったんだけど。必要だね、あれ。全部完全に透明だと、画面ではない、使用感と関係のない場所に入った気泡とかが気になってしまう。でも、黒くしてあると気泡が見えないので、画面の周辺にまで気を遣わずに済む。すんごい重要だわ。

Unityの初心者はSQLiteを使用すべきか?

Unityを勉強している。

仕事でデータベースは必ず使用するので、Unityで使用するデータは全てデータベースに放り込むと便利だ、と思ってSQLiteを使用しようとした。が……。

qiita.com

とりあえず、この通りに構成したが、どうも上手くいかない。クエリを発行しても、ストップするのだ。例外と言わずにストップといったのは、最初例外すら出さずに完全にストップした為。Unityは勉強し始めたばかりで例外がどういう扱いになっているかを知らなかったので、

「まさか例外出てもアプリが終わるだけで何もないのか?」

と誤解しかけた。色々試行錯誤している内に、突如画面下部とコンソールに例外が出てくる様に。最初何も反応しなかったのは何だったのだ……。VSTools for Unityで開発しているが、その他にも例外発生のタイミングでUnityが丸ごと落ちる(Visual StudioでUnityにアタッチしていなければ、落ちない)等、色々おかしい。VSTools for Unityのバグなのかどうかはわからないが……。

そして、一番きついのが「例外を追っても原因がはっきりしない」事。クエリが発行出来なかった、という例外が出る。うん、それで? そこから先が、プラグインをトレースしても原因不明。例外のスタックトレースを見ても、P/Invokeしている先で何かエラーが出ている様で、Unityでそこをどうやってデバッグすればいいのかよくわからない。

1週間ぐらい悩んだ。

悩んだ末に「もうセーブ用のクラス作ってシリアライズしよう……」と諦めたら、1時間でデータの保存部分が完成した。

というわけで、Unityの初心者がいきなりSQLiteを使うのはお勧め出来ない気がする……。データベースとしての機能を使ってやりたい事は、大体LINQでお手軽に代用出来てしまうし。正直ここまで苦労してSQLiteを使う意味があまり無い気がした。