もんりぃ is undefined.

育児ネタとか、技術ネタとか。

UniRx 使ったキーボード入力処理ライブラリを書いた

unirx_observablekeyevent

is 何?

  • キーボード入力を IObservable<Unit> なストリームとして通知するためのライブラリです。
  • あ、もちろん Unity 用です。

何が嬉しいの?

  • 毎回 Update() の中で if (Input.GetKeyDown(KeyCode.Escape)) とかやっていた処理を UniRx でスッキリ書けます。
  • UnityEngine.Component の拡張メソッドも用意してあり、Component の Destroy に併せて購読が破棄されるようになっています。
    • 内部的には単に TakeUntilDestroy() 付けた Wrapper ですw

どうやって使うの?

  • README に書いてありますw
  • 一例として「モバイルあるある」なAndroid のバックキー対応をする場合は以下のようなコードになります。
using UniRx;
using UniRx.Triggers;
using UnityEngine;

class Sample : MonoBehaviour {
    private void Start() {
        this.OnKeyDownAsObservable(KeyCode.Escape).Subscribe(_ => Debug.Log("バックキー押された!"))
    }
}

独り言

  • 初期実装では、Singleton な実装にしていて、KeyCode 毎にストリームを Dictionary にキャッシュするような仕組みになっていましたが、UniRx 的に無駄な実装だと気付き踏みとどまりましたw
  • OnAndroidBackKeyDown() 的なメソッドを生やそうかとも思いましたが、プラットフォーム依存だし完全に蛇足なのでやめました。
  • この記事執筆時点で、クラスの配置ディレクトリが微妙に間違っているのに気付いており、早く直したい気持ちでいっぱいですw
    • 帰宅中の電車内で書いているので、帰ったら直す。
    • v1.0.1 として修正しました。
  • テストコード書きたいんだが、キーボード入力ってテストできんのか…?

リモートワーク Rev.13 / 眠み😴

はじめに

  • 2018/02/13 (Tue) はリモートワークでした。
    • ちょっと喉の具合が悪かったので、念のため。
    • あと、大きな荷物が届くので、男手として。
  • てことでいつもの。

KPT

Keep

  • 後半、相当集中できた。
  • ちょっとしたコトであれば育児できる。
    • 娘のオムツ替えとか、妻がトイレ行っている間に娘の相手するとか。
  • 普段の娘の遊びを垣間見れる。
    • いつもは「ごめん、パパ、その遊び分からない…。」みたいになるが、多少遊びの知識が増える。
  • 娘とお風呂に入っているときに降ってきたアイディアを即コードに落としこめた。
    • 普段一人で入るときは湯船に浸からないコトが多いので、貴重な時間だ。

Problem

  • 朝の立ち上がりが遅い。
    • 普段は通勤という起動プロセスを経るので、会社に着く頃には何とかなってるんだけど…。
  • 娘の相手をする時は仕事にならない。
    • 最近は「構ってー!」なお年頃なので、致し方ない気もする。
    • 集中が分断されるので、何か策を講じねば。
  • 奥さんとの会話が生返事になりがち。
    • まぁ、仕事中なので、そもそも雑談は…みたいな話もあるが、その辺含めてリモートの良さだとも思うので、もーちょい返事しようw
    • 逆に奥さんのストレスになっていなければ良いが…。

Try

  • 朝起きて直ぐにマシンに向かうのではなく、切り替えのための何らかの儀式を取り入れる。
  • 「ちょっと娘ちゃん見てて」ってときは、ヘタに仕事しようとせずに、切り替えて娘と向き合ってみる。
    • 時間管理が難しいが、その辺は受け入れるべき所かな、と。

所感

  • 自分的にも会社的にもリモートワークが普通のことになってきた感がある。

Gotanda.unity #4 で飛び入り LT してきました!

Gotanda.unity とは?

  • 五反田付近で開催される Unity の勉強会コミュニティです。
  • 五反田勤めじゃなくても参加・発表できるので、過去2回(#2, #3)で LT させてもらっていましたw

何話してきたの?

  • 過去に LT したスライドをそのまま使い回して発表したため、スライドの日付とかがおかしなコトになっていますが、気にしたら負けです。
    • ミスじゃないよ!w

何で話したの?

  • 元々は聴講側で参加していたのですが、 mattak (@mustankatti) さんの unitypackage 作るときに気をつけたほうがいいこと という LT を聴いたのがキッカケです。
  • mattak さんの発表内容の課題点の大半を umm が解決できるため、「コレは umm について語って、皆さんに共有せねば!💪」と思い立ってしまったため、無理を言って発表させてもらいました。

どうだったの?

  • Unity はこの辺の周辺環境がまだまだ弱く、「まさに困ってたんです!」みたいな声を聞けたので発表して良かったと感じています。
  • また、発表内容とは関係ありませんが、懇親会で「もんりぃさんのビルド周りの Qiita 記事に凄く助けられました!」と話し掛けて頂けたのが、本当に嬉しかったです。
  • 総じて、「アウトプットする」って素晴らしいなぁ、と感じた一日でした!😆

.NET SDK を入れても dotnet コマンドにパスが通らない問題

前置き

  • 久しぶりの技術ネタ。
  • Visual Studio Code で .cs なファイルを開いたところ The .NET CLI tools cannot be located. .NET Core debugging will not be enabled. Make sure .NET CLI tools are installed and are on the path. というエラーが出続けて困っていた。
  • 普段は JetBrains Rider を使っているので良いっちゃ良いんだが、毎回エラーが出るのもアレなので、一念発起して調べてみて、解決策を見つけたのでその辺について綴る。

現象

  • .NET SDK が入っており C# 用拡張が入っている状態でも、Visual Studio Code がエラーを吐く。

環境

原因

  • #1259|Dotnet is not found under default PATH に答えがあった。
  • zsh はデフォルトだと /usr/libexec/path_helper を呼び出してくれないらしく、 /usr/local/share/dotnet/dotnet にインストールされる dotnet コマンドへのパスが通らない。
  • そのため、Visual Studio Code からも dotnet コマンドが見つけられず、「.NET CLI 入ってないっぽいよ?」ってエラーが出力される。
    • 勿論、ターミナルから which dotnet とかやっても、dotnet not found とか言われる。

解決策

其の壱

  • .zshrc 辺りに以下のシェルを追記する。
PATH="${PATH}:/usr/local/share/dotnet"
  • シンプルに dotnet コマンドがあるディレクトリへのパスを追加するだけ。
  • 影響範囲を極小に出来る。

其の弐

  • .zshrc 辺りに以下のシェルを追記する。
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi
  • /etc/paths.d/ 以下にあるファイル内に書かれているディレクトリを $PATH に追加してくれるコマンド(らしい)。
    • おまけとして $MANPATH 変数が宣言されているなら /etc/manpaths.d を走査して追加してくれるんだとか。
  • で、 /etc/paths.d/dotnet/usr/local/share/dotnet と書かれているので、結果として dotnet コマンドへのパスが通るというカラクリ。
  • 私はこちらを採択しました。

所感

  • 環境周りは色々とハマりますね…。
  • なお、今回の件とは関係ありませんが、 rcm というライブラリを使った dotfiles (.zshrc とかの設定ファイル)管理が便利です。

リモートワーク Rev.12 / 夜更かし問題

はじめに

  • 2018年あけましておめでとうございます!🎍
    • もう半月以上経ってるけどな!
  • 2018/01/17 (Wed) はリモートワークでした。
  • いつもの KPT を綴る。
  • なお今回から、前回の Try の振り返りも追加することにした。

KPT

前回の Try

  • ✅ 水分を多めにとって、トイレの回数を増やす作戦を試してみよう。
    • 割と席を立てた。
    • トイレや用事や娘に構うイベントがちょいちょい発生したから、かな?

Keep

  • この日やるべきコトは達成できた。💪
  • 奥さんの具合が悪そうだったので、程よく休んでもらえた(かな?)。
  • 家族との時間が圧倒的に増える。
    • そして、娘が安定して可愛い!😍
  • 家事が捗る。
    • 昼食後に、溜まったお皿やフライパンをまとめて洗えるので、夕食後の負担が少ない。*1
  • 家から一歩も外に出なかった。何なら外気に触れることすらなかった。
    • すげー楽!

Problem

  • 午前中の集中力が低い。
    • 朝ごはんがクリームパンだけだったのがダメだったのかなぁ…?
  • 娘が定期的に「パパ構って〜!」な感じになるので、集中力が分断されてしまい悩ましい。
    • 娘が可愛すぎる所為で、「お、何だい?☺」ってなっちゃうんだよね。
    • まぁ、オフィス勤務の時も話し掛けられたりして集中力の分断は起きるのだが。
    • この辺は、子どもの年齢が要素として大きいと思うので、奥さんの協力も少なからず必要になりそう。
  • 残業してしまった。
    • 娘を寝かしつけた後に「よーし!」ってな感じで開発しちゃうのは、イカンなぁ…。
  • 家から一歩も外に出なかった。何なら外気に触れることすらなかった。
    • さすがに、自堕落かなぁ…?

Try

  • 集中力の分断がツラい業務の時は、カフェとかコワーキングスペースとかで作業するのがヨサソウ。
    • 自宅近くにあると良いんだけどなぁ…。一応探してみよう。
  • 仕事し過ぎちゃう問題は、「仕方ない」と言えばそれまでなんだけど、組織全体の課題にもつながるので、何とかしていく所存ではある。
  • 引きこもり問題は一長一短で、今のところ大きな問題ではないので放置。

所感

  • 後半集中できたので、最近の遅れを取り戻せた気はする。
  • 娘の可愛さが無尽蔵😘

*1:奥さんの手荒れが酷いので、可能な範囲で水仕事は担当している。

Unity 2017.3.0f3 気になったポイントメモ

はじめに

  • 2017/12/19 (Tue) 深夜に Unity 2017.3.0f3 がリリースされました。
  • 実質的な Unity 2017.3 のメジャーリリースとなる今バージョンのリリースノートで気になったポイントをコメント付きでメモします。

Features

  • Animation: Added support for integer and enum animation.
    • これは地味に欲しかった。
    • float -> int -> enum というキャストを行う必要があり、モヤモヤしていたので。
  • Editor: Added assembly definition files for script compilation pipeline in the editor. This allows you to define your own managed assemblies based on scripts inside a folder. Splitting your project's scripts into multiple assemblies can greatly reduce script compilation times in the Editor. Note that the latest version of Visual Studio Tools for Unity is required for this feature to work with solution and project generation for Visual Studio.
    • 個人的には一番の目玉!
    • umm の Assembly とかサブプロジェクトの Assembly とかを簡単に固められるようになれば、コンパイル時間的に相当有利。
  • Editor: Added the Transform Tool, a single Gizmo you can use to move, rotate and scale in the Unity Editor.
    • どういう操作になるかは分からんが、便利そうな予感。
  • Graphics: Added a new method, ScreenCapture.CaptureScreenshotAsTexture. Use this to save screenshots taken with ScreenCapture as Textures in the Editor.
    • これは、デバッグとかが楽になりそう!
    • PlayMode Test と組み合わせてスクショ撮るとか、夢が拡がる!
  • Graphics: Support for 32 bit Mesh index buffers:
    • 2D メインなウチにはあんまり関係ないけど、表現の幅が拡がるのかな?
  • Particles: Added a new Speed Modifier option in the Particle System Velocity Module. Use this to control particle speeds without changing their directions.
    • Particle の表現の幅が拡がる予感。
  • Particles: Added Unlit and Surface shaders for use with Particle Systems.
    • この手の自前シェーダ書かなくて良くなるのかな?
  • Particles: Ribbonized Particle Trails.
    • ブログに動画貼られてたけど、これは使いどころが多そう。
    • 詳しく理解できなかったが、リボンみたいになびく軌跡って感じかな?
  • Playables: Added new delay feature for IPlayables.
    • Animator とか Timeline とかの Playable を遅延実行できるのかな?
    • 使い方調べないと。
  • Playables: Added new Video Playables Integration.
    • 動画までサポートしたのか。
    • まぁ、ウチで使うことはなさそうだけど。

Backwards Compatibility Breaking Changes

  • OSX: Removed support for targeting 32bit macOS applications. Replaced BuildTarget.StandaloneOSX* enums with BuildTarget.StandaloneOSX.
    • Intel とか Universal とかの謎のサフィックスがなくなるのか。
    • エディタ用の AssetBundle 作るときに毎回困っていたので地味に嬉しい。
    • Windows はまだなのかな?

Changes

  • 2D: Unity now generates a default Physics Shape when it creates a Sprite from an imported Texture.
    • 2D Collider を簡単に作れるようになるってコトかな?
    • 元々、SpriteRenderer に対してゴニョゴニョすればできたような気はするが、Scale の問題とかがあったから嬉しいかも。
  • Android: Release Gradle builds no longer have ProGuard enabled by default.
    • サヨナラ ProGuard...
  • Editor: Added methods EditorGUI.EnumFlagsField and EditorGUILayout.EnumFlagsField, which respect the values of the enum type and support custom names for values 0 and ~0 (all bits set). Deprecated methods EditorGUI.EnumMaskField, EditorGUILayout.EnumMaskField, EditorGUI.EnumMaskPopup, and EditorGUILayout.EnumMaskPopup, which always assume values to be 1, 2, 4, 8 (and so on). (896176)
    • フラグ周りが便利になるっぽさ。
    • Editor 拡張おじさんには朗報かも。

Improvements

  • 2D: Exposed methods to set and retrieve Physics Shape from a Sprite.
    • 上の Collider 関連の変更な対してスクリプトからもアクセス出来るようになったってコトかな?
  • 2D: If you use Shift-Click to do picking for Tile Palette, Unity now switches back to the original tool after picking is done.
    • Tilemap の操作性向上?
    • まだ Tilemap 使ってないから分からん。
  • Android: Added the option to configure Texture decompression format on Android devices that have no ETC2 Texture format support.
    • ETC2 をサポートしてない Android 向けの対応。
    • そろそろデバイスサポートを切りたいところだけどね。
  • Animation: Added a 2D mode to the Animation Previewer.
    • これが良く分からなかった。
    • そもそも Animation Previewer って、モデルの Inspector に出てくるアレかな?
  • Animation: Added zoom in the Animator Window
    • 複雑なステートマシン組んでる Animator の場合にズームは便利かも。
    • まぁ、そもそもそんなステートマシンは…(ry
  • Editor: It is now possible to adjust the number of lines per log row in the Console window.
    • いつも1行しか見えなくて困ってたので助かる!
    • どのくらいアジャストしてくれるのだろうか?
  • Editor: You can now select which Xcode version to build your project with on MacOS.
    • Xcode のバージョン選べるとか凄い時代だw
    • どうやって認識させるんだろうなぁ?
  • Mobile: Engine code stripping now works on Android
    • Android でも Strip Engine Code が使える、と。
    • やや地雷臭がするが、果たして…。
  • Particles: Added support for Meshes using lines and linestrips for particle Shape Module spawning. (931662)
    • 線状に発生する Particle ってコト?
  • Particles: Added update to display particle stats in Editor Play Mode for selected systems.
    • 再生しなくても Particle の Stats が見られるのかな?
  • Particles: Improved the workflow for creating multiple Particle Systems inside a shared GameObject hierarchy: The Particle System no longer resumes playing a paused preview when you select systems belonging to the same effect.
    • 良く分からなかったけど、なんか Particle のワークフローが便利になるっぽさ。
  • Timeline: Added multi-selection capabilities to the Clip Inspector.
    • Timeline 上で複数のクリップを選択したら Inspector で編集出来るようになるのかな?
  • Timeline: Introduced various clip snap improvements:
    • クリップの吸い付きが便利になるのかな?だとしたら嬉しい。
  • UI: All Editor tab views now use FitToContents for button contents with flexible space on either side of toolbar, instead of filling window width.
    • イマイチ理解出来なかったが、コンテンツの自動サイズ調整的な内容なのかな?
  • UI: Cached eventCamera access in Raycast() to avoid calling Camera.main multiple times.
    • UI のイベント関連でのパフォーマンス周りの改善かな?
  • UI: Made performance improvements to GraphicRaycaster and EventSystem. (934842)
    • これも、上に関連してそう。

API Changes

  • Caching: Added overloaded version of ClearCache() that can clear cached AssetBundles which are unused for longer than the given expiration time.
    • AssetBundle の ClearCache が便利になりました、って話っぽい。
  • iOS: Added iOS.Device.RequestStoreReview, a review request API for the App Store.
    • Apple オフィシャルのレビューリクエストダイアログを出せるようになる!
    • これは嬉しい。
  • Playables: Added new callback in PlayableBehaviour: OnBehaviourDelay. This is called in the first frame that the playable is delayed.
    • Playable の Delay 対応に関連したコールバック追加。
  • Playables: Added new callback in PlayableBehaviour: PrepareData. This is called if the playable is delayed.
    • PrepareData って具体的にどのタイミングなんだろうな…?
    • Delay されてるけどインスタンスが生成された時、とかかな?
  • Playables: Added new method to allow building or rebuilding the graph without initiating Play(): PlayableDirector.RebuildGraph.
    • これ、 PlayOnAwake はオフにして RebuildGraph 呼んだら PlayableAsset のイベントとかコールされるのかな?

Fixes

  • Animation: Fixed a crash when closing Animator Window (916970)
    • これが原因かは分からんけど、Animator 使ってると結構 Unity クラッシュしがちなので、直ってたら嬉しい。
  • Asset Bundles: Fixed bug where incorrect error was getting thrown if an asset was included in the same AssetBundle more than once (932726)
    • ぶつかったことはないけど、AssetBundle 関連なので気になった。
  • Cache Server: Fixed several cache server bugs that would manifest as freezes/hangs or failures when reading from a cache server (943300)
    • これ、ヘタしたらマシンごと巻き込んでクラッシュしてたような気もするので、直ってるなら嬉しい。
  • Editor: Crash on macOS when canceling undock of Hierarchy or Scene View (942253)
    • まぁ、これはそんなに行う操作じゃないけど、同じくクラッシュ系なので直ってるなら嬉しい。
  • OSX: Fixed new instance of MonoDevelop opening every time a script is opened (964078)
    • 2017.1 とか 2017.2 でもパッチリリースで直った気はするが、毎回 Open C# Project する度に MonoDevelop が開いていたのはウザかったのでありがたい。
  • UI: Fixed a bug where images would not render if they started disabled. (922641)
    • これ、確か椿さんだか時村さんだかが嘆いていた気がする。

リモートワーク Rev.11 / リビング開発の限界?

はじめに

  • 2017/12/13 (Wed) はリモートワーク日でした。
  • てことで、いつもの KPT する。

KPT

Keep

  • 集中的を保てて、進捗を出せた。
  • 娘からの「パソコン触らせて!」攻撃も割と巧いこと回避できた。(と思う)
  • 奥さん具合良くなかったので、休ませることができた。

Problem

  • ずっと座り続けてしまうので、背中や腰へのダメージが蓄積しがち。
  • 娘からの攻撃に対する応対策を考える必要がありそう。
    • 巧いいこと回避できたとは言え、結構苦戦したので気を紛らわす必要はありそう。
  • ドハマリしたときに、抜け出しにくい。
    • しょーもない Typo に1時間近くハマっていた…。

Try

  • 水分を多めにとって、トイレの回数を増やす作戦を試してみよう。
  • ドハマリしたときにこそ、席を立って伸びをするとか心掛けねば。
    • 妻に起立を促して貰うとか?w

所感

  • 総合点としては高いリモートワーク日だった。
  • 娘のいなし方を学ばねば。