Unite2015 RoundTableに巻き込まれた話


概要

ここで強火さんと自分の写真が使われた(もちろん合法)件について、大前さんをおちょくりに行ったらRoundTableに巻き込まれた。

AssetBundle編ということで、Cacheとかに物申したいんだけどオラーって感じで絡んだのがよくなかった。


結果的にはとても面白い。現在進行形で。



AssetBundleの圧縮がDL後に解除される話について

端末にDLしたリソース、その場で自動的に展開されてしまうのが運命だったが、5.1から圧縮状態で置くことができるようになる。

ヘッダー情報のみをメモリ上に展開、必要なAssetBundle内の必要なファイルのみを読み出せるようになるとのこと。


圧縮形式はLZMA -> LZHAMになる。5.1から。すげえ、俺何にもしないでいいや。


LZHAMについていろいろやろうと思ったのが今年のあたま。

自分は野性の男さんのTwから存在を知った。

https://twitter.com/yasei_no_otoko/status/564614755499786241


公式でサポートされるなら、途中まで書いてた記事とコードは不要になったな、、!! 良い。



キャッシュAPIについての不満(from 俺)

WWW LoadCacheOrDownloadについて


public static WWW LoadFromCacheOrDownload(string url, int version, uint crc = 0);



versionってあるけどversionじゃないよね、みたいな話。


新しいAssetをDLしてincrementされたversion値を与えたら、低いversion値のAssetを自動的に消す機構が欲しいんですが

→5系でhashって名前に変わったよみたいな話。


で、過去のが消えないのは残っているんだけど、これ消していいんじゃね?みたいな話。

→Caching.SetCacheOverrideMode(ver上がったのが入ったら古いのを消すモード) or 消さないモード みたいな。


ぜひ!! ぜひ!!!

デフォルトで使えるものが増えるとうれしいんで!!


あとUnityの中のひとにもUnibook2の俺の章読まれてたのでそれはとってもうれしいなって感じだ。



Cacheしてるファイルが多いとCaching.readyがtrueになるのが劇遅になる問題

知らなかった。そんなことあるんだな。

2000ファイルくらいあると、Caching.readyがtrueになるまでに1秒くらいかかるらしい。


バグじゃね?とのことで、今後なんかあるんだと思う。

確かに2000ファイル程度で遅いのなんかおかしい。



MassProduct作成向けのフローを作って欲しい(from 俺)

素材からAssetBundleを作る、みたいなパイプラインがUnityについてくれるとうれしいなという感じ。


Editor上で個々のAssetBundleが作りやすくなることはうれしい、のだが、

N個のモデル x M個のテクスチャ とかのAssetBundleを用意するか? Unity上で??

という。

んでそのために今年のお正月を捧げて作ったわけですよ、AssetRailsを。

https://www.assetstore.unity3d.com/en/#!/content/27672


ルール、規約ベースでAssetBundleが「素材から」「コマンドラインで」作れるやつ。



無駄に苦しむのが嫌なので、Rail(Plipeline)を作っちゃったんだけど、Unityでそういうのを目指すことは無いんだろうか?

→なるほど。その方向は考えてなかった。

→いろんな会社のやつ見て考えてみたい、っていうかAssetRails知らなかった


はい。ですよね、、知らんよな、、、見た目ダサいしな、、

今度プレゼンするよ。



5系からTypeTreeがAssetBundleに入るようになったので、後方互換性はあるみたいな話

LZMAはLZHAMでも解凍できると思う。

下位互換はケースによってはやばい(クライアント側が古いみたいなケース)

なので、クライアント側が古いけどアンパンマン!新しいAssetBundleよ!みたいなことをするとヤバそうという話。

まあそれはそう。



IL2CPPのパッチに関しては4系のほうが適用が早い

とのこと。


5.1

時期とか話にでてたけど、詳しくは明日のroom1、 4thセッションで。



LoadFromCacheOrDownload と、CreateFromFile

ヘッダ情報を読みだして、AssetBundle内の本当に必要なものだけを読むようになる。

全部をメモリ上に展開しておくという動作ではなくなる。


素敵!! っていうかそういう設計のほうがいいだろJKでもありがとうみたいな感じ。

一つのAssetBundleを作るとき、それらをフルに使いきるべき、使いきれる組み合わせでBundleにすべし、みたいな呪縛が消える。



今日言えなかったこと

明日もあるんだけど、忘れそうなので書いておく。

以下2つ。



1.Importした画像ファイルをUnity内でノーオーバーヘッドでコピーしたい

Importが終わったファイルには、Unity内でIDが振られている。

で、それはAssetか?というと、Assetではない。

よってノーオーバーヘッドでのコピーができない。

コピーができないと、一個のリソースから別のリソースを作るとき、オーバーヘッドが悲しいのでなんというかはい。

以前試した、ここのあたりが詳しい。


UnityでのAssetになった画像ファイルのコピーでインポートを避けることは出来ないという結論

http://sassembla.github.io/Public/2015:01:08%2010-26-50/2015:01:08%2010-26-50.html


こんな問題抱えてるの俺しかいないはず。


で、Import済みのリソースをコピーできる(Unity内でのAssetではない物体のDuplicate)とうれしい。

再Importのオーバーヘッドを減らせる。

それ以外にも、モデルとかに関してもいろいろできるはず。



2.標準でJSONライブラリください

あのっあのっ


何度目だろう。ください、、くだs、、、

あると、、、その、、、なんだ、、、、楽、、、、、

というか他のライブラリが含まれているのが面倒くさくてですね、ええ。

たとえばクソみたいな広告やさんだと、ライブラリのネームスペース変えずにブッコンでくるんですよええ。ええ。

おかげでDuplicateしてんぞオラってビルドエラーになるんですわ。ええ。ええ。


デフォルトの力をみせてくれ、、、



おまけ:今回の提案での自分のスタンスを書いておく


・デフォルトで用意されているAPIが素晴らしいならできるだけデフォルトを使う

非カスタマイズ厨なので、頑張らないのが正義。


・デフォルトが残念な場合、可能であればデフォルトを素晴らしいものにする

逆割れ窓理論。良いものは良い使い手を作り出す。逆にAPIのデフォルトがクソだとそのプラットフォームは大変だ。逃げよう。


・最低限自分が得をする行動、提案をする

何処かの誰かが得をするかも、みたいなのはあんま信じない。最低限自分が得をすべき。レベルが低かったら誰かが殴ってくれることを信じている。


・作った人達の意図を最大限探求する

使ってみて合わない場合、意図を汲み取り損ねてるだけの可能性が結構ある。そんで意図を知るとなるほどってなる場合がある。

なるほどってならない場合もある。


・意図が合わないなら初めて作る

みたいな。