Unity 5.3で気になった項目まとめ
Unity 5.3で新しく追加・変化する機能についてです。
個人的に気になる順番で紹介します。
プラットフォーム個別ダウンロード
Unityエディタをダウンロードする際に、不要なプラットフォームを含めないように設定可能になったみたいです。
エディタのみだと、ダウンロードサイズは400MBくらいまで小さくなります。
このプラットフォームサポートは後で追加したりも出来ます。
但しそのときインストールしたUnityエディタのバージョンと一致してないと認識してくれません。
マルチシーンエディティングとその周辺
複数のシーンを同時に編集可能なマルチシーンエディティングが可能になりました。
これにより、「ステージ」「敵」「ギミック」や、「UI」と「ゲーム」といった分割作業が簡単になります。
また、DontDestroyOnLoad(シーン切替時に破棄されない)が明示的に表示されるようになりました。
「現在開いていないシーン」をHierarchyへドラッグ&ドロップすることで、Hierarchyに新しくシーンが読み込まれます。
ちなみに即時読込を行いたくない場合は、Altを押しながらHierarchyへドラッグ&ドロップします。範囲が広いシーンはこれで行うのが良さそうです。
アンロードもしくは読み込んでいないシーンは、Load Sceneで再度読み込めます。
これに伴い、シーン関連の運用がUnityEngine.SceneManagement.SceneManagerへ変化しました*1。
SceneManagerでは、現在アクティブなシーン一覧の確認や、特定のシーンへオブジェクトを移動させる等の機能を持っています。
エディタ拡張周りはEditorSceneManagerを使用します。
マルチシーンエディティングも、幾つか癖のある挙動があるのでAssetBundleの次辺りに詳しく説明しようと思います。
LZ4圧縮のAssetBundle
AssetBundleの圧縮はLZMAを使用していた訳ですが、新しくLZ4フォーマットが追加されました。
このフォーマットではチャンク読みが可能になっており、圧縮した状態でもアセット分のメモリ消費のみで解凍出来るようになっています。つまり、CacheOrDownloadを行った場合にファイルが全て解凍されず、圧縮した状態のまま保持出来るみたいです。
その他諸々結構色々と変わってるので、別途紹介します。
ちなみに現在検証中ですが、Unity 4で作ったAssetBundleがUnity 5.3で読める事案が発生中。
マルチディスプレイ
カメラを複数台用意し、どのビューにどのカメラを表示するか…といった制御が可能になりました。Standalone向けに。
ONにするためには少しスクリプトが必要だったと思いますが、これでマルチスクリーンなゲームが作りやすくなります。
UIのScreenSpace-Overlayを使用してる場合、どのディスプレイに表示するか選択する項目が追加されています。
ちなみに、VR向けで「HMDを被った時のVR画面」と「VR画面を外からみた画面」の2つを別々に表示するAPIも追加されてたりします。
非同期なテクスチャのアップロード
Unityのロード時にゲームが止まる要因にテクスチャのVRAM(GPU)へのアップロードがありました。ここはバスが狭い上に超解像度が多いモバイルでは問題になってました。
これを非同期…というか、分割して転送することで停止時間を減らすアプローチが追加されました。
非同期でシーンやリソースを読む際、Async Upload Time SliceやAsync Upload Buffer Sizeで分割され読み込まれるみたいです。
パーティクルの改善とその周辺
ほぼGUIでしか設定できなかったパーティクルシステムに、ちゃんとAPIが追加されました。
また、Scaling ModeがLocalのときに大きさの設定をオブジェクトの設定から行えるようになったり、
2D Colliderに対して当たるようになります。
2D周りとその周辺
2Dの目玉機能であるスマートテラインやタイルマップは5.4に見送りになりましたが、その他幾つかの面白い機能が残りました。
スプライトのFlipとか、
接続を破壊可能な2D Jointとか、
描画周りの処理が軒並みメインスレッドから別スレッドに移行した事とか。
幾つかのiOS9機能の対応
iPad Pro pencil(ペン型のデバイス)やら iOS9 app slicing(iPadとiPhoneでリソースを分ける)やらdemand resource (必要な時にリソースを追加ダウンロードするapple側の仕組み)が追加されたみたいです。
パフォーマンスについて色々
IL2CPPスクリプトのバックエンドの初期化時間を短縮したり、
OpenGLES2.0向けにStandardShaderを調整したり、
シェーダーの読込周りを改善したり、
何かオーディオクリップ読込が遅かった問題を治したり、
GIがOFFに出来てなかったせいで発生してた妙なパフォーマンス低下を治したり、
UIのシェーダーを改善したり(ifを使ってる所があった)
OpenGL Core
DX11専用だったコンピュートシェーダーやらその辺りがOSXでも動くようになるっぽいです。以前のOpenGLES3.1でAndroidでも動くようになったので、Unity上にGPUパーティクルが来る日も近いきもしなくもなくもなくも・・・
SSRや新しいイメージエフェクト
Unity 5.3で入る予定だったスクリーンスペースリフレクション等のエフェクトですが、一旦AssetStoreでの公開へ切り替えたみたいです。
https://www.assetstore.unity3d.com/jp/#!/content/51515
他にもDoFやアンチエイリアス、トーンマッピングカラーグレーディングが含まれます。
カスタムコルーチン
コルーチンに独自の条件で待ち受ける仕組みが追加されました。
CustomYieldInstructionを継承したり、ラムダ式で評価してコルーチンの条件設定を行うことが可能になっているみたいです。
カスタムコルーチン - Unity Blog https://t.co/Nr5eSulWvc カスタムコルーチンを使うと「クリックされたら次の行を実行」みたいな処理をこんな感じで書ける。 pic.twitter.com/kOTLtGLjhw
— 椿 (@tsubaki_t1) 2015, 12月 2
UnityWebRequestのモバイル対応
JSONの公式サポート
ちなみに、このAPIは別スレッドから呼べるみたいです。
IAP(アプリ内課金)の追加
追加されました。
むしろ、何故今まで追加されなかったって気も。
各ストア毎のプラグインをインポートして使います。
AndroidのHide Status Barが削除
Hide status barが削除されたみたいなので、表示したい場合は(Android 4.4 以降でナビゲーションバーを常に表示させたい )を設定する必要がありそうです。
何故消したし
Monodevelopで日本語が打てる
Unity 5.3 で搭載される予定の新型 Monodevelop 5.9 Preview。最大の特徴は、日本語が打てる。Macで日本語が打てる。 http://t.co/MVwfgGsdU4 pic.twitter.com/pvA05Fm4eu
— 椿 (@tsubaki_t1) 2015, 9月 1
VSCodeにデバッグ機能が追加されたり、WindowsだとVisual Studio community editionが標準搭載だったりと存在が薄くなってるMonodevelopさんですが、標準でも日本語が打てるようになったので少し助かり。
デバイスへのスクリプトデバッグって(多分)まだVSCodeでは出来ないですし。
関連
*1:Application.LoadLevelもまだ使えます