個人的な思い出し用箇条書きメモ。かなり意訳。意訳しすぎて間違いを書いている可能性大。私以外が読むことはあまり考えていない。
基調講演
技術的な話はなかったので略。
永遠に続けていくつもりだから、10年後に今を振り返えれたりするといいなみたいなことを行っていた気がする。
Unity レンダリングパイプライン
セッションで使われたサンプルとスライド(.pdf)がダウンロード出来る。
http://is.gd/RenderingPipeline_UniteAsia13
#pragma muilti_compile とか、light probes とか、DX11対応機能の話とか。
スライドが公開されてるので書くこと無し。
Editor拡張で #pragma muilti_compile を使って書かれている Shader を切り替えるサンプル(CustomMatInspector)はとても参考になりそう。
シーン/メモリ/アセットバンドル
後日、動画の録画を配信するらしい。
シーンがどういう形式にビルドされているか
- ビルドすると level0 とか *.assets とかいうファイルがシーンごとに作られる
- 1つのシーンは Assetがまとまったファイルと、それ以外(シーンのヒエラルキに表示されてるような奴)の情報が入ったファイルで構成される
- Assetsは複数シーンで重複しないように、シーン番号の若いシーンに入っているAssets以外は、それを参照でしょうするためのデータが入ってる
- /Applications/Unity/Unity.app/Contents/Tools/binary2text で、Assetsの情報が入ったファイルをテキスト化するとなんとなく読める
- 1つのシーンは Assetがまとまったファイルと、それ以外(シーンのヒエラルキに表示されてるような奴)の情報が入ったファイルで構成される
シーンがどのようにロードされているか
AssetBundle
複数のAssetBundleでの重複Assetについて
- 複数のAssetBundleに同じAssetが入っていると、重複分もメモリに乗ってしまう
- PushAssetDependencies でAssetBundle同士の依存性を設定して、重複部分は参照情報だけになるAssetBundleを作成できる。
- 弱点:参照はインデックス番号でされているため、参照先の中でのAssetの順番がずれると、参照元でずれたものを参照してしまう
- BuildAssetBundleOptions.DeterministicAssetBundle
- 参照がインデックスではなくIDになる
- 弱点:読み込みの順番がファイル配置順を考慮しなくなるので、ディスクメディアからなどの読み込みだと極端にシーク時間がかかる可能性がある
- PushAssetDependencies でAssetBundle同士の依存性を設定して、重複部分は参照情報だけになるAssetBundleを作成できる。
AssetBundleの読み込み方法
- 1番オススメ:LoadFromCacheOrDownload
- ダウンロードしたものが展開された状態でストレージに保存される
- 実行時の読み込みの際に、展開用のメモリが必要ない
- その分、ストレージの容量は圧迫する
- ダウンロードしたものが展開された状態でストレージに保存される
- 2番目にオススメ:CreateFromFile
- 圧縮していないAssetBundleしか使えない
- 圧縮できないのでストレージの容量は圧迫する
- 非おすすめ:WWW、CreateFromMemory
- 展開に使う分のメモリが必要
- 圧縮したAssetBundleが使える → ストレージ容量は節約できる
- 過去の遺物:Resources
- AssetBundleと比べて効率が悪い。今から作るならAssetBundleを使ったほうが良い
シリアライズ徹底解説
資料は twitterで @stramit を追っていればそのうちアップされるらしい
serialize
SerializeFieldとかNonSerializedとか。
コンストラクタで初期化してものは、ScriptableObjectで上書きされる*1。
OnEnable() で null だったら new するようにすると、SerializeFieldで設定された値がない場合だけ初期化できる。
Custom property editor
話についていけてなかった。
Property Drawers in Unity 4 – Unity Technologies Blog ← この辺の Serialize 辺りの話をしていたのか?
Androidでコンテンツを守る方法 - Unity Androidでのプログラムとデータの暗号化、およびハッキング対策
資料はUniteのAsiaツアーが終わったら公開予定らしい。
Google Playと通信してのVerifiを定期的にすること。
ネイティブアプリ時代のローカルデータ管理入門
ファイルの圧縮
- AssetBundleの圧縮形式を使う
- UnityではSystem.IO.Compressが使えないので、他の動くものを使う
復号や解凍処理で処理を止めないために
- コルーチンで少しずつやる
- System.Threadが使えるので使う
2日目も行っているが、あとで書く。たぶん。