もんりぃ is undefined.

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

我慢する能力

2018/11/04 (Sun) にちょっと印象に残る出来事があったので、久しぶりに育児関連の日記を残します。

前置き

  • 日中、いつも通りキドキドに連れて行き、都合2.5時間くらい一緒に遊ぶ
  • 遊び終わった後は、これまたお決まりのデートコースとして、フードコートのミスドでおやつを食べる🍩
  • 帰宅途中のバスの中で寝落ちして、20時くらいまで起きず😭
  • 「あー、こりゃ今夜も寝つき悪いね…。」なんて話しつつ、「まぁ風呂でも入れるか。」と思ったところからが本題

本題

「嫌!お風呂入らない!」と駄々をこねる娘氏。

日によっては、コッチもメンドイので「今日はいいか…。」みたいに引くこともありますが、前日殆ど風呂入っていないに等しい状態だったので、夫婦でアイコンタクトを取り何としても入れるモードに移行し、この手のやりとりが得意な自分が交渉人になりました。

伝わっているかどうかはさておき、風呂に入る理由とかを説明しつつ、洗面所で「嫌!」「入ろうね。」の押し問答が繰り広げられます。

自分の要求が通らないコトへの苛立ちから、顔を真っ赤にして唇を震わせながら泣き叫ぶ娘氏。

30分近く娘からの罵声(?)を浴びつつ、頑なにかつ冷静に「お風呂入るよ。」と伝え続けたところ、「………。ママと入る…。」と折れてくれました。

我慢出来たことを夫婦で思いっ切り褒めつつ、入浴を済ませました。めでたしめでたし

振り返り

最初、「叱って入れさせる?前は効いたけど…。」みたいな話もしていたけど、「いや、ココはお互いツラいけど、娘の意思で我慢出来るようになるまで待とう。」という風に方針を決めました。

と言うのも、何かのブログだか育児情報サイトだかで「叱るコトによって生じる我慢は、脳の扁桃体の作用に依るモノで、本来の我慢とかを司る前頭前野が育たない。」的なコトを書いてあったのを思い出したからで、「これは正に試す機会だ!」と思いました。

幸い、自分はワガママをぶつけられてもイラッとすることが少なく、かつ頑固な性格なので、この手の案件は適任と言えましたw

所感

娘は今のところ一人っ子なので、きょうだいが居る子に比べると我慢する機会は少なくなりがちなので、色々気を付けないとなぁとか思っています。

我慢しすぎると、それはそれで自己主張の抑圧に繋がる気もするのでバランスが難しいですが。

今回のやり方が正しかったのかどうかは分かりませんが、もう少し試行を重ねて様子を見てみようと思います。

Unity 2018.3.0b7 で Unity Package Manager の民主化が進んだので検証してみた

TL; DR

  • 今はまだ移行できない
  • が、民主化まであと一歩なので、準備は進めた方がヨサソウ

Unity Package Manager について

  • ググれ
  • Unity が提供する新しいパッケージマネージャ
  • GUI 経由で各種パッケージを追加・更新・削除できるやーつ

2018.3.0b7 について

2018/10/24 (恐らく太平洋時間?)に公開された 2018.3 系の最新ベータ。

それのリリースノートに以下の記述が…!

Package Manager: Add experimental support for Git package dependencies.

キタ━━━━━(゚∀゚)━━━━━!!!!

早速試したお!

https://twitter.com/monry/status/1055273094435098624 https://twitter.com/monry/status/1055301050268151809

少なくとも public repository からコードを取得するコトは難なくできた。

「遂に umm が民主化された…!?」と思ったけど、そんなコトもなかった。

現状の課題

依存の依存

  • manifest.json (Unity のプロジェクトが依存するパッケージを指定するファイル)には GitHub とかを含む git やら https やらのプロトコルを指定出来た。
  • が、依存先のパッケージの package.json には git やら https やらのプロトコルを指定出来なかった。
  • つまり、まだ依存解決のモジュールとして使うコトはできなさそう。

SemVer 記法

  • yarn ではできるが npm やら upm やらではできないコトとして、 Git リポジトリのバージョンに対する SemVer 指定ができない という問題点がある。
    • まぁ、実は npm の場合は git://github.com/monry/foo.git#semver:^1.0.0 みたいな書き方できるんだけど、ちょっと不便。
    • yarn は git://github.com/monry/foo.git#^1.0.0 こんな感じに書ける。
  • で、upm に関しては、どちらの書き方も許容されていない感じだった。
  • 基本的には manifest.jsonlock ノードで頑張る感じ…なのかな?

更新検知

  • 現時点では、GitHub を参照している場合に於いて、GitHub 側で新しい Version が作られても検知されない。
  • manifest.jsonlock ノードの対象パッケージに関する記述を消せば、再チェック掛けてくれるもよう。
  • そのうち何か提供されると信じたい。

パッケージ作成のワークフロー

現状考えているパッケージ開発のワークフローは以下のような感じ。

パッケージ新規開発

  • 任意のローカルパスに開発用のディレクトリを作成
  • package.json を配置
    • 各フィールドはテキトーに書き換えよう!
{
  "name": "tv.monry.upm.test",
  "dependencies": {
  },
  "version": "1.0.1",
  "unity": "2018.2",
  "displayName": "Monry Test",
  "description": "",
  "keywords": [
    "unity"
  ],
  "readme": "test test test"
}
  • この package.json を Package Manager Window の Add package from disk... から追加
    f:id:monry84:20181025134219p:plain
    f:id:monry84:20181025134413p:plain
  • 無事に追加されました :tada:
    f:id:monry84:20181025134319p:plain
  • 今回追加した Packages/Monry Test/ はあくまでローカルディレクトリへの参照なので、普通にスクリプトの追加とかができます。便利!

パッケージ公開

  • 個別のパッケージ自体は単なるディレクトリなので、普通に git で管理して GitHub に push しましょう。

プロジェクト設定

  • パッケージ開発中の manifest.json には "tv.monry.upm.test": "file:///Users/monry/Developer/git/monry/upm-test" 的な内容が書かれている。
  • パッケージが公開された以降は "tv.monry.upm.test": "git://github.com/monry/upm-test.git" などと書き換えましょう。

パッケージ改修

  • これが結構メンドイ。
  • 一回プロジェクトの manifest.jsonGitHub → ローカルディレクトリに向け直す必要がある。
  • ちょっと頑張ればエディタ拡張作れそうな気もするので、何か、まぁ、頑張れ。

まとめ

  • Release Note にもあるように、今はまだ Experimental Support のレベルなので、もう一歩って感じです。
  • が、民主化は目前なので、ライブラリ開発を行う各位は準備に向けて動くと良いんじゃないでしょうか?

おまけ

今回検証したリポジトリは以下の通りです。

Firebase Analytics の Raw Data を BigQuery で解析する時に起きた問題とその原因

はじめに

最近は専ら BigQuery とキャッキャウフフする日々を送っています。

今回は「何か特定の曜日だけデータがメッチャ多いんだけど…?」という問題が起きたので、それの備忘録を記します。

問題

  • BigQuery から集計したデータが、特定の日だけユニークユーザ数がやたらと多い
  • それ以外の日も Firebase Console の Audiences で表示される UU よりも、BigQuery で集計した UU の方が若干多い

前提

  • Firebase Analytics の Export BigQuery オプションを有効にしている
  • BigQuery 上で Raw Data を集計した中間テーブル的なモノを作っている
  • Google DataStudio を用いて中間テーブルに対してクエリを発行してビジュアライズしている *1

原因

  • Push Notification 関連のイベントも集計してしまっていた

詳細

Firebase Analytics のイベントには大きく分けて2種類のイベントがあります。

  1. Firebase Analytics が自動的に送信するイベント
  2. 開発者が独自に送信するイベント

そして、どちらのイベントにも user_pseudo_id というカラムに、インストール毎に変化する擬似的なユーザ IDが付与されており、この値をもとにユニークユーザ数などを集計するコトになります。*2
また、それぞれのイベントの種別を表すためのキーとして event_name というカラムも存在しています。

で、今回求めたいデータというのはアプリを起動したユニークユーザ数だったわけですが、Firebase Analytics の仕様として一部のイベントはアプリが起動していなくても送信される(ただし Android に限る)という点を失念しており、それらの数値も含まれてしまったが故にデータ数に乖離が発生してしまいました。

その一部のイベントというのは以下のようなモノが該当します。

  • notification_received: FCM *3 による PUSH 通知を受信
  • notification_opened: FCM による PUSH 通知を開封
  • notification_dismissed: FCM による PUSH通知を削除
  • app_updated: アプリを更新
  • app_data_cleared: アプリデータを削除
  • os_updated: OS を更新

今回の件で言うと、PUSH 通知周りのイベントを集計対象に含めてしまったコトにより、アプリを起動していないユーザも数えてしまったと言うわけです。

所感

原因が分かってしまえば「なーんだ、そんなことか。」という感じですが、いかんせんデータが多いので、調査はかなり大変でした。

仮説を立てては小規模な範囲でクエリを叩いて*4結果を検証して…、の繰り返しはなかなか頭がチリチリする感じがします。

おまけ

調査の過程で、Firebase Console の Audiences の値との差についても調べたのですが、どうやら Firebase Console 側は user_engagement かそれに類するイベントをベースに集計した数値のように見受けられました。*5

この辺、詳細なドキュメントあったら教えてください…。

*1:今回これは関係ないけど

*2:勿論、独自に発行したユーザ ID も付与可能で、その場合は user_id というカラムに設定されます。

*3:Firebase Cloud Messaging

*4:範囲がデカいと掛かるコストもデカいので…。

*5:厳密に一致するデータを集計することが出来なかったのですが、最も近い値となりました。

KidsStar 開発合宿 vol.6 を開催しました

はじめに

私が勤める株式会社キッズスターでは、開発チーム *1 メンバーの技術力アップや交流を目的として 開発合宿 *2 というイベントを不定期で開催しています。

第6回である今回は「CAFU v3 完全に理解した」という大仰な名前を付けて、「現在利用している CAFU v2 から CAFU v3 に移行すると何が変わるのか?」といった視点でセミナー形式の勉強会として開催いたしました。

今回もクローズドな開催としてキッズスターの開発チームメンバーのみを対象にした勉強会でしたが、内容的にはパブリックにできるモノでしたので、概要や資料などを公開したいと思います。

概要

CAFU: Clean Architecture for Unity*3 のメジャーバージョンを3に更新したので、その変更点を軸に、CAFU v3 ではほぼ利用が必須になる Zenject についても取り扱っています。

勉強会自体は、最近作成したサンプルプロジェクトのコードを参照しながら進めており、その辺も動画に収めてあります。

資料

スライド

speakerdeck.com

動画

CAFU v3 の変更点

Zenject のおさらい

処理の流れ

v2 と v3 の共存・移行について

所感

約3時間ぶっ通しで喋ったので後半の方は流石に声が掠れ気味になってますw

当日の資料は esa.io でサッと作成したモノを用いたのですが、2時間ちょいで作ったにしては割と良い感じに仕上がったなぁとか思っています。esa 便利!

Clean Architecture の模索と Zenject の理解とライブラリ作りとを並行で進めていたので、サンプルプロジェクト作りにめっちゃ時間かかってしまいましたが、これで一段落といったところです。

まだ、サンプルのドキュメント拡充したりとかテスト書いたりとかしないとですが。

そして、毎回会場の手配から打ち上げのセットアップなど何から何まで裏方業務を丸っとやってくれている @lycoris102 に改めて感謝!!!

*1:社員・フリーランスの別を問わず

*2:別に宿泊するわけではありません。そのうちそういうのもやりたいけどね。

*3:Unity で Clean Architecture な開発を行うためのアーキテクチャフレームワーク

Firebase の BigQuery Export Schema の地雷?を踏んだお話

TR; DR

  • マイグレーション実行時には最新情報を確認しましょう
  • _TABLE_SUFFIX 使う場合、テーブル間でスキーマ定義違っても動くことがあるので注意しましょう

はじめに

2018/06/26 あたりに Firebase の BigQuery Export Schema が大幅に変更されました。

前もって準備していたので、私は すんなり移行できました。 …と、思っていました。

実は、移行の時に自分で地雷を埋めていたコトに気付かずに、今日になって思いっ切り踏み抜いたので、記録に残しておきます。

まぁ、超レアケースだと思うので、この記事が役に立つ人は殆ど居ないと思いますがw

前提

Google DataStudio でレポートを作るために、中間テーブル的なモノを BigQuery 上にこさえて、解析の高速化とコスト圧縮を図ろうと考えていました。

仕組みとしては、以下のような構成を想定。

  • Compute Engine でデイリー cron 動かす
  • シェルで Pub/Sub 叩く
  • そいつをトリガーに Cloud Functions を実行
  • BigQuery と会話して日々の生データを中間テーブルに格納

更に、Pub/Sub に特別なメッセージを Publish することで、過去分も遡って再集計する仕組みも作りました。

ちなみに、Cloud Functions のコードは Cloud Source Repositories の master への push をトリガーにしてたりします。

この辺の話もいつか記事にするかも。しないかも。

現象

で、殆ど仕組みが出来上がったので、「過去データを一気に集計して中間テーブル完成させよう!」としたところ、 Cannot read field 'event_date' of type DATE as STRING といった謎なエラーに遭遇しました。

いや、別に謎では無いけど、普通に動くケースもある状態で、「???」って感じになってました。

最初は Web UI 上で巧く動いてて、Cloud Functions 上だと転けるので、そっち方面のドキュメント読み漁ったりしたけど、全く解決せず途方に暮れていました。

原因

で、ふと「そいえば、過去データってどんなの入ってるんだろ?」と思って Web Console を覗いてみたところ、「あれ? カラム型違わね…? 」「うお、何か 特定の日を境に DATE 型と STRING 型とでカラム定義変わっとる やないかーい!」という衝撃の事実に気付きました。

で、その日付というのが、「Export Schema 変更実施日」そのものでした。

つまり、手動マイグレーションによって作成されたテーブルと Schema 変更後に作成されたテーブルとで event_date カラムの型が異なっていたわけです。

ここからは推測を含みますが、マイグレーション自体を前々から準備していた所為で、移行日直前に変更されたスクリプトの修正に追従できておらず、結果としてスキーマ定義が異なったまま運用し続けていたもようです。

そもそも発覚しなかった理由としては、 event_date カラムを使っていなかったからなんですが。*1

対応

幸い、マイグレート前の元データは残してあったので、対象期間の新スキーマテーブルを削除して、マイグレーションスクリプトを更新してから再実行して事無きを得ました。

蛇足

Firebase の BigQuery Export Schema は単なるテーブル群として出力されます。

後付けで柔軟にカラム追加するための戦略かなぁ?とか邪推してますが、どうなんでしょう?*2

Partitioned Table の場合はカラム定義の混在ができないので今回の問題は起きなかったと思いますが、何れにしても「ちゃんと確認しましょう」というお話でした。

*1:ってか、このカラム最初からありましたっけ…?記憶にないんだよなぁ…。

*2:Partitioned Table の場合もカラム追加はできた気がするので、関係ないかも。

AssetBundle の地雷を踏んだお話し

はじめに

今日また Unity の AssetBundle の地雷を踏んだので、同じ地雷を踏まないように記録として残します。

なお、この地雷は私自身が埋めたものであり、普通に使う分には起きないものなのでご安心ください。

経緯

とあるプロダクトの AssetBundle を更新したところ、以下のような不可思議な現象が発生するようになった。

  • 最新版(v1.1.0 としておく)を新規インストールする分には問題ない
  • 一つ前のバージョン(v1.0.0としておく)を(DeployGate などから)インストールする分にも問題ない
  • v1.0.0 で AssetBundle をダウンロードしておいて、v1.1.0 で AssetBundle を更新すると 一部の AssetBundle のみ更新されない
  • しかも、「v1.0.0 でダウンロードだけした場合」は問題無く、「v1.0.0 でダウンロードし、実際に使われている画面まで進んだ場合」が NG

とても不可解な現象で、CDN のキャッシュとかも疑ったけど問題無さそうだった。

前提

とあるプロダクトの AssetBundle 要件としては以下のような感じだった。

  • タイトル画面に入るタイミングで必要な AssetBundle を全てダウンロードする仕組みになっている
  • AssetBundle Manifest を用いずに、URL のみでキャッシュ管理を行っている
  • URL の中に各 AssetBundle のバージョン的なものを示す数値が含まれる
    • https://example.com/v1/foo.unity3d
    • https://example.com/v1/bar.unity3d
    • https://example.com/v2/foo.unity3d
    • みたいな感じ
  • ダウンロードのみを行うメソッドと、読み込みを行うメソッドが分かれている

原因

前提のなかで記載している「読み込みを行うメソッド」の中で使っている UnityWebRequestAssetBundle.GetAssetBundle()オーバーロード(string url, uint crc) ではなく (string url, Hash128 hash, uint crc) になっており、更に hash には new Hash128() を渡すという状態になっていた。

分析

詳細な仕様は分からないが、キャッシュ周りの仕組みは以下のようになっていると考えられる。

なお、 crcチェックサム)については話がヤヤコシクなるので割愛。

  1. ダウンロードされた AssetBundle を GetAssetBundle() の引数に応じて保存
    • hashversion が渡されていない場合は、AssetBundle の実体から取得できる AssetBundle Name *2 をそのままファイル名として利用して保存 *3
    • hashversion が渡されている場合は、 AssetBundle Name と hashversion をファイル名に加えて利用して保存
  2. GetAssetBundle() の引数に渡された URL と AssetBundle Name との対応表的なものを別途保存
    • ココでは hash とか version は記録されていないんじゃないかと思われる

で、今回のケースの場合、ダウンロード時と読み込み時に引数が異なってしまっていたコトが原因で、以下のような感じになったものと推察される。

ここでは、 https://example.com/v1/foo.unity3d, https://example.com/v2/foo.unity3d という AssetBundle をダウンロードする場合を考える。

  1. v1.0.0 のダウンロード処理
    • 対応表に https://example.com/v1/foo.unity3d に該当する AssetBundle Name が見付からないのでダウンロードが開始される
    • hash ナシのファイル foo.unity3d が保存される
    • 対応表に "https://example.com/v1/foo.unity3d":"foo.unity3d" 的な情報が書き込まれる
  2. v1.0.0 の読み込み処理
    • 対応表に 1. で保存されたhttps://example.com/v1/foo.unity3d に該当する AssetBundle Name はあるが、キャッシュの実体として hash アリのファイルが見付からないので、ダウンロードが開始される
    • hash アリのファイル 00000000000000000000000000000000-foo.unity3d が保存される
      • new Hash128() を渡してしまっているので、実際のハッシュ値00000000000000000000000000000000 とかになると思われる
  3. v1.1.0 のダウンロード処理
    • 対応表に https://example.com/v2/foo.unity3d に該当する AssetBundle Name が見付からないのでダウンロードが開始される
      • URL のバージョン番号のところが異なるのでキーがないはず
    • hash ナシのファイル foo.unity3d が更新される
    • 対応表に "https://example.com/v2/foo.unity3d":"foo.unity3d" 的な情報が書き込まれる
  4. v1.1.0 の読み込み処理
    • 対応表に 3. で保存された https://example.com/v2/foo.unity3d に該当する AssetBundle Name があり、更に 2. で保存された hash アリのファイル 00000000000000000000000000000000-foo.unity3d が存在するため、キャッシュから読み込みが行われる
    • 結果として古いファイルが読まれてしまう!

所感

いや、はい。同じオーバーロード使わなかったオレが悪いんです。

引数省略せずに、素直に AssetBundleManifest.GetAssetBundleHash() とかで取得出来る Hash を使うと良いんじゃないでしょうか。

この辺のキャッシュの詳細な資料ってどこかに転がっていませんかねぇ…?

*1:ホントは改竄対策とか中途切断のコトとか考えるとダメなんだけど、日和ってます

*2:Inspector で設定するアレ

*3:いや、内部的にはハッシュ値とか取ってるかもだけど分からん

Unity 2018.3 Beta で気になったポイント

はじめに

2018/09/11 に Unity 2018.3.0b1 が公開されました。

2018.2 がリリースされてから結構経過していますが、無事にベータリリースが行われて安心しています。

ってことで、リリースノート読んで気になった項目をピックアップしてみたいと思います。

ピックアップ

Features

新機能について。

Android: Added support for requesting permissions at runtime.

  • これで Native Plugin 書かなくて済む…!

Android: Kotlin source files now can be used as plugins.

  • Kotlin 書いたコトないけど、嬉しい人多いっぽい。

Android: OpenJDK will be included into Unity Android support, user will no longer be required to install Java.

  • 遂に Java8 のインストールから解放される…w

Editor: Introduced searchable Unified Settings window for Project Settings and Preferences

  • 何が何処にあるのか分からん問題が解消される。

Editor: Rider installation path detection in Editor Preferences.

  • JetBrains さんとの蜜月関係が良いですね。いいぞもっとやれ。

Graphics: Added memoryless framebuffer depth to iOS Metal.

  • 良く分かってないけど、iOS でのパフォーマンス良くなるのかな?

Multiplayer: Added support for providing a custom network transport implementation to be used by Unity Multiplayer's high-level API. Refer to the documentation on UnityEngine.Networking.NetworkManager.activeTransport for details.

  • これは例の GCP と組んで民主化が云々のヤツかな?

Package Manager: Added support for packages in the Project Browser.

Physics: Added complete set of non-allocating 2D queries to new multi-scene PhysicsScene2D type.

  • サッパリ何のこっちゃか分からんけど、なんか気になる。

Physics: Added the ability to have a per-scene physics world allowing separate simulation and queries (3D physics).

  • マルチシーン関連の Physics が改善されてるのかな?

Playables: Exposed the time wrap mode for Playables.

  • 経過時間分かるとかだったら嬉しいけど、そうなのかな?違う?

Playables: Implemented a method to send notifications through the playable system.

  • Playable イベント関連の話かな?

Player: [Also mentioned under API Changes] Added AssetBundle.RecompressAssetBundleAsync API to re-compress downloaded AssetBundles from one compression methodology to another runtime supported compression methodology. Moved BuildCompression, CompressionLevel and CompressionType out of the UnityEditor.Experimental.Build.AssetBundle namespace and into UnityEngine.

  • AssetBundle おじさんとしては気になる。
  • ランタイムで再圧縮できるとかそういう話?

Prefabs: New Improved Prefab Workflows (Not preview nor Experimental)

  • Nested Prefab キタ━━━━━(゚∀゚)━━━━━!!!!
  • Not preview nor Experimental という所につよさを感じるw

Scripting Upgrade: Enabled Roslyn compiler and C# 7.2 when targeting the new scripting runtime.

  • C# 7.2 キタ━━━━━(゚∀゚)━━━━━!!!!
  • Preview 外れるの早かった!(Incremental Compiler のコトで良いんだよね?)

Scripting Upgrade: The .NET 4.x scripting runtime is now the default. The .NET 2.0 scripting runtime has been deprecated and support for it .NET 2.0 will be removed in a future release.

  • ようやく .NET 4.x がデフォになってくれた!
  • むしろ遅すぎたくらいだw

Backwards Compatibility Breaking Changes

破壊的変更について。

Android: Deprecated Internal build system

  • マジか。ビルドシステム Gradle に切り替えないと…。

Web: WWW is now obsolete. Use UnityWebRequest instead.

  • 今までありがとう。 R.I.P.

Changes

Build Pipeline: Calling BuildPipeline.BuildPlayer while scripts are being compiled will now wait for compilation to complete before beginning the build process, rather than aborting compilation.

  • 地味に困ってた感じもあるので嬉しい。

iOS: iOS/tvOS simulators players are now distributed as dylibs.

  • 遂にシミュレータが使える…?元々使えたっけ?

iOS: The Mono scripting backend has been marked as deprecated.

  • 今までありがとう。 R.I.P.

Improvements

2D: Added an option in Sprite Editor to display pivot position in pixels and snap pivot to pixels when you drag it.

  • まだそこまで Sprite Editor ガッツリ使ってないけど、レベルデザイナさん的には嬉しい?

2D: Added Isometric support for 2D Tilemap.

Android: Added option to start Android app in non-fullscreen mode.

  • Android の非フルスクリーンが使えるようになる。
  • 今までは Native Plugin 書いてたからちょっと便利になるね。

Android: Added WebCamTexture acceleration for Android 5.0 and later.

  • WebCamTexture が Android でのパフォーマンス良くなる。
  • VTuber 業が捗りますね。

Android: Improved player loading time on Android devices.

  • Android 版のアプリ起動時間長かったから嬉しい。

Animation: Animator will not automatically create an empty output when it doesn't have an AnimatorController assigned

  • 不要なアセットが作られなくなる。
  • 毎回消してたりするのでちょっと嬉しい。

Editor: Added warning when assembly definition file (asmdef) assemblies are not loaded on startup where one or more of their asmdef references are not being compiled due to having no scripts. Also added warning when compiling asmdefs with no scripts in the Editor.

  • Assembly Definition 周りのサポートもより手厚くなってきてる。

Package Manager: Add references to package manager asmdef files from the Object Selector

  • UnityEngine.TextMeshPro とかを直編集で追加してたから助かる。

Package Manager: Upm now provides the author information of packages

Physics: Upgrade the PhysX version to 3.4.2. This is the latest release up to date.

  • そもそも今のバージョン知らないけど、より速くなるらしい。

UI: Added Sprite Atlas Late-Binding support for UI.

  • Sprite Atlas の遅延読み込みサポート。
  • Addressables との絡みもあるけど、メモリ効率考えると嬉しい話だ。

Web: UnityWebRequest will now support cookies in the same game session. Also added API to remove them.

  • UnityWebRequest で Cookies サポートか。
  • 普通に Token で認証してるケースが多い感じもするけど、嬉しい人は嬉しそう。

API Changes

2D: New experimental API to set preview texture for SpriteEditorWindow with Experimental.U2D.ISpriteEditor.SetPreviewTexture. Importers that support ITextureDataProvider can also provide custom SpriteEditorWindow preview texture by implementing Experimental.U2D.ITextureDataProvider._previewTexture.

  • まだ Experimental だけど、 SpriteEditor 周りのエディタ拡張が便利になってくる…!

iOS: Added support for Telephoto, Dual Back and True Depth cameras on iOS devices (new enum WebCamKind, new properties WebCamDevice.kind, WebCamDevice.depthCameraName, WebCamTexture.isDepth).

  • 結構 WebCam 周りの対応に力を入れてくれている。
  • VTuber 関連のブームもあるので、正しいタイミングな気もする。

Scripting: Added an optional exitCode parameter to Application.Quit().

  • ビルドおじさん歓喜

Fixes

気になるのはイッパイあるけど、そもそも項目がメッチャ多いので、かなり抜粋。

Asset Import: Fixed issue with MonoBehaviours and ScriptableObjects not being recognized in .NET 4.x .dlls after changing scripting runtime version from .NET 3.x to .NET 4.x. (1012922)

  • ウチのケースが該当してるのかは分からんけど、偶に認識されないコトがある問題が解消される?されない?

Build Pipeline: Fixed issue where EditorBuildSettings was not updated when a scene was moved or renamed.

  • Scene のファイル名変えても Scenes in Build の中身が変わってくれない問題が直ったらしい。嬉しい。

Editor: Fixed an issue where "Shift+Tab" does not navigate backwards on OSX. (1065620)

  • 気付いてなかったけど、 Shift + Tab 利いてなかったんだね。

所感

待望の Nested Prefab 来ましたね!

そして、 C# 7.2 もマジで嬉しい!

全体的に 2D 系のサポートを頑張っている印象があります。

個人的には Unity Package Manager の民主化がいよいよ間近…?という感じがしてソワソワしています。